Ausführen von benutzerdefinierten tasks, wenn der Anruf `pip install`
Ich möchte meine python-Paket "pip installierbar". Das problem ist, dass das Paket shell-script ist, muss bezogen werden, in der user-init-shell-Skript (z.B. .bashrc
).
Aber nach der installation wird der Benutzer nicht genau weiß, wo das Skript ging (vermutlich /usr/bin
, aber wir können nicht garantieren). Natürlich kann der Benutzer läuft which myscript.sh
und manuell bearbeitet sein init-Skript.
Aber ich will diesen Schritt automatisieren. Ich kann eine neue distutils-Befehl, aber pip install
nicht nennen. Und ich kann erweitern distutils.command.install.install
, aber die installation bricht über pip (obwohl die arbeiten über 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})
shell
$ 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
Was ist die beste Vorgehensweise zum ausführen eines benutzerdefinierten tasks nach der Installation eines Pakets über pip
?
- Sie könnten versuchen mit
from setuptools.command.install import install
anstattdistutils
? - es hat geklappt! bitte Antwort, damit ich das annehmen kann. 🙂
- Getan. Froh, dass es funktionierte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie versuchen, mit
from setuptools.command.install import install
anstattdistutils
?python setup.py install
, aber nicht wenn ichpip install <path>
. Irgendwelche Gedanken?pip install -e .
läuft die command-Klasse und dann läuft es, wenn ich bdist_wheel aber während pip installieren, passiert nichts.