从 setup.py 中的包导入脚本

Igl*_*gle 7 configuration python-import setup.py python-3.x

我想使用setup.py从脚本导入的脚本,该脚本是必须安装的包的一部分。该脚本仅包含一个dict包含用于创建入口点的字符串的 。我没有在 中对它们进行硬编码,setup.py因为我想稍后从已安装的软件包中再次使用此列表。

只是为了清楚我的目录结构和重要文件:

PackageA
|_package_a
| |_models
| |_modules
| | |_do_query.py
| | |_...
| |_setup_cfg.py
| |_ __init__.py
| |_...
|_ __init__.py
|_setup.py
Run Code Online (Sandbox Code Playgroud)

__init__.pypackage_a

from .setup_cfg import setup_config
Run Code Online (Sandbox Code Playgroud)

setup_cfg.py

setup_config = {
    'scripts': [
        'do_query'
    ]
}
Run Code Online (Sandbox Code Playgroud)

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')]
    },
)
Run Code Online (Sandbox Code Playgroud)

我可以进行导入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

Sam*_*dra 1

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

我刚刚导入没有相对路径

例如:

from package_a import setup_config
Run Code Online (Sandbox Code Playgroud)

只是删除了相对路径(点删除),它起作用了。pycharm 抛出错误,但在运行时pip3 install .它起作用了。请告诉我它是否适合您。