我想使用从脚本导入的setup.py
,该脚本是必须安装的包的一部分。此脚本只包含dict
,其中包含用于创建入口点的字符串。我还没有在setup.py
中对它们进行硬编码,因为我想稍后再从已安装的软件包中使用此列表。
只是为了清除我的目录结构和重要文件:
PackageA
|_package_a
| |_models
| |_modules
| | |_do_query.py
| | |_...
| |_setup_cfg.py
| |_ __init__.py
| |_...
|_ __init__.py
|_setup.py
__init__.py
中 package_a
:
from .setup_cfg import setup_config
setup_cfg.py
setup_config = {
'scripts': [
'do_query'
]
}
setup.py
# -*- coding: utf-8 -*-
from setuptools import setup, find_packages
from .package_a import setup_config
with open('README.rst') as f:
readme = f.read()
with open('LICENSE') as f:
license = f.read()
setup(
...,
entry_points={
'console_scripts': ['{}=package_a.modules.{}:main'.format(script, script) for script in setup_config.get('scripts')]
},
)
我可以使导入from .package_a import setup_config
和pycharm正确解析此导入。但是,如果我尝试通过pip3 install .
安装软件包,则会因ModuleNotFoundError: No module named '__main__.package_a'; '__main__' is not a package
而失败
(我们使用pip
代替python setup.py install
,因为我们希望整个源文件夹安装在site-packages而不是捆绑版本中)
任何人都可以向我解释异常或提供正确的方法来实现这样的配置吗? (导入已安装的软件包时,setup_config.py
中的字典必须也可以从setup.py
访问。
答案 0 :(得分:0)
我遇到了类似的问题,并且以非常奇怪的方式解决了这个问题,我真的不知道它工作的原因,即使我认为它不起作用。
我刚刚导入时没有相对路径
例如:
from package_a import setup_config
刚刚删除了相对路径(删除了点),就可以了。 pycharm抛出错误,但在运行pip3 install .
时它起作用了。如果它适合你,请告诉我。