Python 当我想同时运行我的应用程序';来源';使用setuptools进行安装时会遇到什么问题?
考虑此应用程序:Python 当我想同时运行我的应用程序';来源';使用setuptools进行安装时会遇到什么问题?,python,python-2.7,import,packages,package-structuring,Python,Python 2.7,Import,Packages,Package Structuring,考虑此应用程序: . ├── LICENSE ├── MANIFEST.in ├── program │ ├── apple.py │ ├── __init__.py │ ├── __main__.py │ ├── nonfruit.py │ ├── pear.py │ ├── strawberry.py │ └── vegetables │ ├── carrot.py │ ├── __init__.py │ └── lettuce
.
├── 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
\uuuu main\uuuu.py
是用户使用我的程序时应该运行的文件。我通过PyPI分发我的程序,所以我希望能够通过pip安装它。因此,我创建了一个带有入口点的setup.py
文件:
entry_points = {
'console_scripts': ['pg=program.__main__:main']}
我面临的问题是,我的程序中有几个导入,这些导入导致我的程序确实“本地”运行(通过执行python./\uu main\uuuuuuuuuuupy
),但不是通过安装运行(通过运行pg
)。或者,根据导入方式的不同,相反
\uuuu main\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
from nonfruit import Nonfruit
import vegetables.carrot
ca = vegetables.carrot.Carrot()
nonfruit.py
进口蔬菜/carrot.py
:
from nonfruit import Nonfruit
import vegetables.carrot
ca = vegetables.carrot.Carrot()
我希望听到一些关于导入的建议,以便它在本地和安装setuptools时运行。例如,我应该使用绝对导入还是相对导入?我应该使用从X导入Y
还是导入X.Y
?我在上找到了一个解决方案
这些说明是为Python 3编写的,但我成功地将其应用于Python 2.7。我的问题源于我的目录变成了一个包。Jan建议创建一个文件从源代码(bootstrap runner.py
)运行它,并创建一个文件从安装运行它(bootstrap/\uu main\uuuuuuuuuuuuuuuuuuu.py
)此外,他建议使用明确的相对进口:
from .X import Y
在我编写的下一个应用程序中,这可能是一个很好的指南