我正在嘗試向Python distutils添加後安裝任務,如How to extend distutils with a simple post install script?中所述。該任務應該在已安裝的lib目錄中執行Python腳本。該腳本生成安裝軟件包所需的其他Python模塊。使用distutils/setuptools執行Python腳本後安裝
我第一次嘗試如下:
from distutils.core import setup
from distutils.command.install import install
class post_install(install):
def run(self):
install.run(self)
from subprocess import call
call(['python', 'scriptname.py'],
cwd=self.install_lib + 'packagename')
setup(
...
cmdclass={'install': post_install},
)
這種方法的工作原理,但據我所知有兩個缺點:
- 如果用戶使用了比其他Python解釋器從
PATH
中挑選出一個,安裝後腳本將使用不同的解釋器執行,這可能會導致問題。 - 對於幹運行等是不安全的,我可以通過將它包裝在函數中並用
distutils.cmd.Command.execute
來調用它來彌補。
我該如何改進我的解決方案?有沒有推薦的方法/最佳做法?如果可能的話,我想避免拉入另一個依賴項。
對於那些希望能夠使用'python setup.py install'以及'pip install'的用戶,請參閱:http://stackoverflow.com/questions/21915469/python-setuptools-install-requires -is-ignored-when-overriding-cmdclass –