【发布时间】:2017-01-20 04:34:47
【问题描述】:
我正在为我一直从事的项目过渡到基于包的工作流程。我希望能够分离开发和生产环境,我认为 setuptools 可以在一定程度上轻松提供这种可能性。
我有一个项目结构如下:
modulename/
setup.py
modulename/
file_a.py
script.py
在script.py中,我想导入file_a.py。目前我通过import file_a 做到这一点。
我的 setup.py 看起来像:
from setuptools import setup, find_packages
setup(name='modulename',
packages = find_packages(),
package_dir = {'': '../modulename'},
scripts = ['modulename/script.py'])
目前,当我在执行python setup.py install 之后运行script.py 时,我收到一条错误消息:
SystemError: Parent module '' not loaded, cannot perform relative import
我尝试了package_dir = ... 的各种排列方式,尤其是package_dir = {'': 'modulename'},但这会在安装时引发另一个错误error: package directory 'modulename/modulename' does not exist
我不确定我做错了什么。 setuptools 的在线文档在处理涉及相对导入的情况方面相对较差。有人能指出我正确的方向吗?
【问题讨论】:
-
我猜问题不是
setup.py,而是script.py作为__main__模块运行并同时使用相对导入。看看here -
好的,那么这里是为了将脚本保留在包之外,然后只使用普通导入吗?
-
基本上就是这样,我想。
-
你想发布一个实际的答案,我会接受,因为这在功能上解决了我的问题?
标签: python python-3.x import package