2017-07-24 73 views
0

我想要使用从作为必须安装的包的一部分的脚本导入的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__.pypackage_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为好。

+0

您正试图从目录中导入所有'*'。您只能在文件中使用这种导入方法。即你可以使用'from .package_a.modules._do_query import *' – Gahan

+0

抱歉,已经更正了这个错误,但贴错了。我纠正了它。反正也是一样的例外。 – Igle

回答

0

我遇到类似的问题,同时也解决了它很奇怪的方式,我真的不知道这是工作的原因,即使我认为这不应该工作

我只是没有进口相对路径

如:

from package_a import setup_config 

只是删除了相对路径(点取出),它工作。 pycharm正在抛出错误,但在运行时pip3 install .工作。请让我知道它是否适合你。