构造python项目的非常简单的方法是什么?
所以我有一个python的东西需要处理一个文件 首先是:构造python项目的非常简单的方法是什么?,python,module,package,python-import,project-structure,Python,Module,Package,Python Import,Project Structure,所以我有一个python的东西需要处理一个文件 首先是: my_project/ ├── script.py my_project/ ├── script.py ├── util/ │ └── string_util.py ├── services/ │ └── my_service.py 我只需使用python script.py file.csv运行它 然后它成长为: my_project/ ├── script.py my_project/ ├── script.py ├──
my_project/
├── script.py
my_project/
├── script.py
├── util/
│ └── string_util.py
├── services/
│ └── my_service.py
我只需使用python script.py file.csv
运行它
然后它成长为:
my_project/
├── script.py
my_project/
├── script.py
├── util/
│ └── string_util.py
├── services/
│ └── my_service.py
(每个目录中都有一个空的\uuuu init\uuuu.py
)
但是现在我的服务.py
想要使用字符串util.py
,如何很好地做到这一点非常不简单
我想在我的服务.py中执行从..util导入字符串\u util
(使用从服务导入我的服务
)导入到脚本.py
),但这不适用于python script.py
,因为我的
服务的
名称
只是服务。我的
服务(并且我得到了在顶级包之外尝试的相对导入
)
- 我可以做
和cd..
,但这看起来太不自然了,如果把它放在自述文件中以了解如何运行它,那就太糟糕了python-m my_project.script
- 现在我正在用丑陋的
hack解决这个问题sys.path.append()
我还有其他选择吗 这几乎是众说纷纭,但我将分享我对这一点的看法 你应该以不同的方式看待你的项目。选择一个执行点,并从那里引用导入,以避免尝试处理的所有奇怪的相对导入。因此,看看您的项目结构:
my_project/
├── script.py
├── util/
│ └── string_util.py
├── services/
│ └── my_service.py
正如您当前所做的那样,从myu项目中执行代码。那样的话,你所有的导入都应该是关于这一点的。因此,您的导入实际上如下所示:
# my_service.py
from util.string_util import foo
考虑这一点的另一种方式是,如果您正在移动项目,或者有一个CI,则需要确保指定要从中执行的项目根目录。记住这些,并指定项目应该执行的单一执行点,这将使您在构建包和模块并适当引用它们时的生活更加轻松,允许其他系统正确使用您的项目,而不必处理奇怪的相对导入
希望这有帮助 我可以分享我对此的看法,但它将作为一个答案发布。让我知道你的想法。哇,我其实一点都没想到。这很简单。所以我可以从..util导入字符串中删除。
,一切都很好。(如果我对这里的绝对进口很酷的话,我就是。)这确实有帮助。谢谢