[英]How do I package a single python script which takes command line arguments and also has dependencies?
[英]Installable distutils packages: How do I import package modules from command line scripts which are also part of the same package?
我創建了一個Python包,其中包含純模塊和腳本,它們都在同一文件夾中。 這些腳本需要利用模塊中的功能,因此只需導入它們即可:
import *module*
我現在希望與其他人共享此軟件包,因此我已使用distutils將其轉換為可分發的軟件包。 按照distutils 文檔的說明,我已在包中的“ setup.py”中聲明了腳本文件,如下所示:
setup(...,
scripts=['path/to/script/a', 'path/to/script/b']
)
安裝此軟件包后,我注意到distutils已將命令行腳本的副本安裝到Python安裝中的“ Scripts”文件夾中。 一切都很好。 現在,如果我嘗試運行這些腳本中的任何一個,它將失敗並顯示:
ImportError: No module named *module*
大概是因為安裝后腳本和模塊之間的相對路徑已更改,因此無法再找到模塊。 所以我的問題是,您應該如何從同一軟件包中的腳本中導入模塊,以使其既可以與distutils捆綁在一起,又可以在安裝后使用?
現在,我可以通過修改模塊導入來輕松解決此問題,如下所示:
try:
import *module*
except ImportError:
from *package* import *module*
這似乎有點hack。 我在這里錯過了一個把戲嗎? 我希望distutils可以幫我解決這個問題。 有沒有更好,更強大的方法來處理此問題?
也許嘗試setuptools
它有一個很好的自動創建主腳本的方法 。 簡短示例:
setup(
# other arguments here...
entry_points = {
'console_scripts': [
'foo = my_package.some_module:main_func',
'bar = other_module:some_func',
],
'gui_scripts': [
'baz = my_package_gui.start_func',
]
}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.