我想要使用从作为必须安装的包的一部分的脚本导入的setup.py
。该脚本只包含一个dict
,其中包含用于创建入口点的字符串。我没有在setup.py
中对它们进行硬编码,因为我想稍后从安装的软件包中再次使用此列表。从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
因为我们希望有安装在站点包,而不是捆绑的版本,整个源代码目录)
谁能解释我那个例外还是提供了一个合适的方法来实现这样的配置? (导入安装包时setup_config.py
的字典必须从入店setup.py
为好。
您正试图从目录中导入所有'*'。您只能在文件中使用这种导入方法。即你可以使用'from .package_a.modules._do_query import *' – Gahan
抱歉,已经更正了这个错误,但贴错了。我纠正了它。反正也是一样的例外。 – Igle