2017-07-24 84 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 .工作。請讓我知道它是否適合你。