当我想“从源代码”和使用setuptools安装运行我的应用程序时,我应该使用什么导入系统?

2024-09-30 22:14:25 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑此应用:

.
├── LICENSE
├── MANIFEST.in
├── program
│   ├── apple.py
│   ├── __init__.py
│   ├── __main__.py
│   ├── nonfruit.py
│   ├── pear.py
│   ├── strawberry.py
│   └── vegetables
│       ├── carrot.py
│       ├── __init__.py
│       └── lettuce.py
├── README.md
├── setup.cfg
└── setup.py

__main__.py是用户应该运行以使用我的程序的文件。我通过PyPI分发我的程序,所以我希望能够通过pip安装它。因此,我创建了一个带有入口点的setup.py文件:

entry_points = {
      'console_scripts': ['pg=program.__main__:main']}

我面临的问题是,我的程序中有几个导入,这些导入导致我的程序确实“本地”运行(通过执行python ./__main__.py,而不是通过安装(通过运行pg)。或者,取决于我导入它的方式,反之亦然

__main__.py导入nonfruit.py

from nonfruit import Nonfruit

nonfruit.py导入vegetables/carrot.py

import vegetables.carrot
ca = vegetables.carrot.Carrot()

我希望在构建项目时听到一些关于导入的建议,以便它在本地和安装setuptools时运行。例如,我应该使用绝对导入还是相对导入?我应该使用from X import Y还是import X.Y


Tags: 文件frompyimport程序initlicensemain
1条回答
网友
1楼 · 发布于 2024-09-30 22:14:25

我在Jan-Philip Gehrcke's website上找到了一个解决方案

这些指令是为与Python3一起使用而编写的,但我成功地将其应用于Python2.7。我遇到的问题源于我的目录变成了一个包。Jan建议创建一个文件以从源(bootstrap-runner.py)运行它,并创建一个文件以从安装(bootstrap/__main__.py)运行它。此外,他建议使用明确的相对进口:

from .X import Y

在我编写的下一个应用程序中,这可能是一个很好的指南

相关问题 更多 >