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
在我编写的下一个应用程序中,这可能是一个很好的指南