构建python项目的一个非常简单的方法是什么?

时间:2016-03-08 23:09:37

标签: python module package python-import project-structure

所以我有这个需要处理文件的python。

首先是:

Chrome_WidgetWin_1

我只想用my_project/ ├── script.py 运行它。

然后它变得成长:

python script.py file.csv

(每个目录中都有一个空my_project/ ├── script.py ├── util/ │ └── string_util.py ├── services/ │ └── my_service.py

但是现在 __init__.py 想要使用 my_service.py ,这真是太棒了,不能直截了当怎么做很好。

我想在 string_util.py (使用from ..util import string_util导入 my_service.py )中script.py进行操作,但这不适用于from services import my_service,因为 python script.py my_service只有__name__(我得到 {{ 1}}

  • 我可以services.my_serviceAttempted relative import beyond toplevel package,但这看起来很不自然,如果将它放在自述文件中以获取如何运行它的话会非常糟糕。

    < / LI>
  • 现在我正在用丑陋的cd ..黑客解决它。

我还有其他选择吗?

1 个答案:

答案 0 :(得分:2)

这接近于意见,但我会分享我对此的看法。

您应该以不同的方式看待您的项目。选择一个执行点,并从那里引用您的导入,以避免您尝试解决的所有奇怪的相对导入。所以,看看你的项目结构:

my_project/
├── script.py
├── util/
│   └── string_util.py
├── services/
│   └── my_service.py

正如您目前所做的那样,请在my_project内执行您的代码。这样,你的所有导入应该就这一点而言。因此,您的导入实际上如下所示:

# my_service.py

from util.string_util import foo

另一种思考方式是,如果要移动项目或拥有CI,则需要确保指定要执行的项目根目录。牢记这些事情,并指定项目应该执行的单一执行点,在处理结构化包和模块并适当引用它们时,将使您的生活更轻松,允许其他系统正确使用您的项目无需处理奇数相对进口。

希望这会有所帮助。