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

What is a very *simple* way to structure a python project?

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

首先是:

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 并且如何很好地做到这一点真是该死的不直接。

我想在my_service.py中做from ..util import string_util(导入到script.pyfrom services import my_service),但这不适用于 python script.py,因为 my_service__name__ 只是 services.my_service(我得到 Attempted relative import beyond toplevel package

我还有哪些其他选择?

这是近乎不同的观点,但我会分享我对此的看法。

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

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

正如您目前所做的那样,从 my_project 中执行您的代码。这样你所有的进口 应该 是关于那一点的。因此,您的导入实际上是这样的:

# my_service.py

from util.string_util import foo

考虑这一点的另一种方法是,如果您要移动项目,或者有一个 CI,您需要确保指定要从中执行的项目根目录。记住这些事情,并指定应该执行项目的单一执行点,将使您在处理构建包和模块并适当引用它们时,让您的生活变得更加轻松,从而允许其他系统正确使用您的项目无需处理奇怪的相对进口。

希望这对您有所帮助。