所以我有一个需要处理文件的 python 东西。
首先是:
my_project/
├── script.py
我会简单地运行它python script.py file.csv
.
然后它长大并成为:
my_project/
├── script.py
├── util/
│ └── string_util.py
├── services/
│ └── my_service.py
(有一个空__init__.py
在每个目录中)
But now my_service.py
想要使用string_util.py
如何很好地做到这一点实在是太不简单了。
我想要做from ..util import string_util
in my_service.py
(这是导入到script.py
with from services import my_service
),但这不适用于python script.py
since my_service
's __name__
那么只有services.my_service
(我得到了Attempted relative import beyond toplevel package
)
我还有什么其他选择?
这与观点接壤,但我会分享我对此的看法。
您应该以不同的方式看待您的项目。选择一个执行点,并从那里引用您的导入,以避免您尝试解决的所有奇怪的相对导入。因此,查看您的项目结构:
my_project/
├── script.py
├── util/
│ └── string_util.py
├── services/
│ └── my_service.py
正如您当前所做的那样,从内部执行代码my_project
。这样你所有的进口should就这一点而言。因此,您的导入实际上如下所示:
# my_service.py
from util.string_util import foo
另一种思考方式是,如果您要移动项目或拥有 CI,则需要确保指定要从中执行的项目根目录。记住这些事情,并指定应该执行项目的单个执行点,将使您在处理构建包和模块并适当引用它们时变得更加轻松,从而允许其他系统正确使用您的项目无需处理奇怪的相对进口。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)