如何避免在python包中重复命名?

时间:2017-01-13 10:50:52

标签: python module package

假设我正在构建一个模拟香蕉的python项目,我将如何构建它?我通常以

开头
mkdir bananas

然后我在bananas.py中编码,这是文件,直到我开始添加README,LICENSE,CONTRIBUTORS等,并且python文件刚刚丢失在元文件中。然后我再做同样的事情

mkdir bananas
mv *.py* bananas

以便将实际代码与元分开。现在我有一个双重的重复dir结构,

$ ls /path/to/bananas
README
LICENSE
CONTRIBUTORS
bananas/banana.py

所以这最终在

bananas/bananas/banana.py

这对我来说感觉不对。我最接触的代码被隐藏得太远了。我还讨厌像

这样的进口商品
from bananas.bananas import Banana

我只想做

from bananas import Banana

有什么想法?我错过了什么?我引用HGP

  

重复路径会让您的工具和您的工具感到困惑   开发人员。不必要的筑巢对任何人都没有帮助(除非他们是   怀旧的整体SVN回购)。

2 个答案:

答案 0 :(得分:2)

就我个人而言,我没有看到像这样构建它的任何问题,而且这是我在自己的项目中所做的。根据我尝试过的一些在线指南,它似乎是推荐的方法。

例如,从Open Sourcing a Python Project the Right Way开始,作者定义了一个示例项目的结构:

 private async void Login_Click(object sender, RoutedEventArgs e)
    {
        ActiveCareService.UserClient client = new ActiveCareService.UserClient();

        var userFromService = client.DoLoginAsync(@"username").Result;
        await client.CloseAsync();

        var dialog = new MessageDialog("Logged in as " + userFromService.FirstName); **This just returns a string of the type of object it is, not the actual object. This is what I'm struggling with.**
        await dialog.ShowAsync();

        Frame.Navigate(typeof(YourSites));
    }

因此,在这种情况下,您最终会得到$ pwd ~/code/sandman $ tree . |- LICENSE |- README.md |- TODO.md |- docs | |-- conf.py | |-- generated | |-- index.rst | |-- installation.rst | |-- modules.rst | |-- quickstart.rst | |-- sandman.rst |- requirements.txt |- sandman | |-- __init__.py | |-- exception.py | |-- model.py | |-- sandman.py | |-- test | |-- models.py | |-- test_sandman.py |- setup.py 这样的路径。

答案 1 :(得分:1)

有时这是不可避免的。只需查看标准库的datetime模块即可。

datetime.datetime datetime.datetime.today().date()

你可以做相对进口。香蕉中的文件只需要

from bananas import Banana  # or
from .bananas import Banana

无论如何,建议通过使模块可移动来重复使用模块m)

有些人导入模块,而不是类

from bananas import bananas as bananaModule
bananaModule.banana()

你也可以给你的项目一个花哨的代号,使它成为:

from fancyish.bananas import bananas as bananaModule