【发布时间】:2013-03-28 23:56:44
【问题描述】:
我想让我的 python 包“可安装 pip”。问题是这个包有 shell 脚本,它必须来自用户的 init shell 脚本(例如.bashrc)。
但安装后,用户并不确切知道脚本去了哪里(大概是/usr/bin,但我们不能保证)。当然用户可以运行which myscript.sh并手动编辑他的初始化脚本。
但我想自动化这一步。我可以创建一个新的 distutils 命令,但 pip install 不会调用它。而且我可以扩展distutils.command.install.install,但是安装会通过pip中断(虽然可以通过python setup.py install工作):
setup.py
from distutils.command.install import install
class CustomInstall(install):
def run(self):
install.run(self)
# custom stuff here
do_my_stuff()
setup(..., cmdclass={'install': CustomInstall})
外壳
$ pip install dist/mypackage.tar.gz
Unpacking ./dist/mypackage.tar.gz
Running setup.py egg_info for package from file:///path/to/mypackage/dist/mypackage.tar.gz
Installing collected packages: mypackage
Running setup.py install for mypackage
usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: -c --help [cmd1 cmd2 ...]
or: -c --help-commands
or: -c cmd --help
error: option --single-version-externally-managed not recognized
Complete output from command /path/to/.virtualenvs/myvirtualenv/bin/python -c "import setuptools;__file__='/tmp/pip-OFjrqU-build/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-s4Yo4d-record/install-record.txt --single-version-externally-managed --install-headers /path/to/.virtualenvs/myvirtualenv/include/site/python2.7:
usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: -c --help [cmd1 cmd2 ...]
or: -c --help-commands
or: -c cmd --help
error: option --single-version-externally-managed not recognized
----------------------------------------
Command /path/to/.virtualenvs/myvirtualenv/bin/python -c "import setuptools;__file__='/tmp/pip-OFjrqU-build/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-s4Yo4d-record/install-record.txt --single-version-externally-managed --install-headers /path/to/.virtualenvs/myvirtualenv/include/site/python2.7 failed with error code 1 in /tmp/pip-OFjrqU-build
Storing complete log in /path/to/myhome/.pip/pip.log
通过pip 安装软件包后运行自定义任务的最佳方法是什么?
【问题讨论】:
-
你能用
from setuptools.command.install import install代替distutils吗? -
@Alok,它成功了!请回答,以便我接受。 :)
-
完成。很高兴它成功了。