从setup.py中的包导入脚本

时间:2017-07-24 12:27:28

标签: python-3.x configuration python-import setup.py

我想使用从脚本导入的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访问。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,并且以非常奇怪的方式解决了这个问题,我真的不知道它工作的原因,即使我认为它不起作用。

我刚刚导入时没有相对路径

例如:

from package_a import setup_config

刚刚删除了相对路径(删除了点),就可以了。 pycharm抛出错误,但在运行pip3 install .时它起作用了。如果它适合你,请告诉我。