我想要使用從作爲必須安裝的包的一部分的腳本導入的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