Pip no recoge un cmdclass de instalación personalizado

Así que encontré esta respuesta a mi pregunta exacta, pero por alguna razón no funciona:

$ cat /tmp/testinstall/setup.py :

 from setuptools.command.install import install from setuptools import setup class verifying_install(install): def run(self): print "running........" install.run(self) print "verifying........" setup(name='test', version='1', py_modules=['test'], include_package_data=True, zip_safe=True, cmdclass={'install': verifying_install} ) 

Pero entonces, a pesar de que setup.py install funciona:

 ➜ /tmp/testinstall $ mktmpenv && cd - This is a temporary environment. It will be deleted when you run 'deactivate'. (5bc7db7ca1b34ec5)➜ /tmp/testinstall $ python setup.py install running install running........ running build running build_py creating build creating build/lib.linux-x86_64-2.7 copying test.py -> build/lib.linux-x86_64-2.7 running egg_info creating test.egg-info writing test.egg-info/PKG-INFO writing top-level names to test.egg-info/top_level.txt writing dependency_links to test.egg-info/dependency_links.txt writing manifest file 'test.egg-info/SOURCES.txt' reading manifest file 'test.egg-info/SOURCES.txt' writing manifest file 'test.egg-info/SOURCES.txt' running install_lib copying build/lib.linux-x86_64-2.7/test.py -> /home/bwm/.virtualenvs/5bc7db7ca1b34ec5/lib/python2.7/site-packages byte-compiling /home/bwm/.virtualenvs/5bc7db7ca1b34ec5/lib/python2.7/site-packages/test.py to test.pyc running install_egg_info Copying test.egg-info to /home/bwm/.virtualenvs/5bc7db7ca1b34ec5/lib/python2.7/site-packages/test-1-py2.7.egg-info running install_scripts verifying........ 

(Tenga en cuenta la running... y verifying...... líneas)

pip install de pip install del directorio no funciona:

 (5bc7db7ca1b34ec5)➜ /tmp/testinstall $ deactivate && mktmpenv && cd - && pip install . Removing temporary environment: 5bc7db7ca1b34ec5 Removing 5bc7db7ca1b34ec5... New python executable in 4cac61c13d080257/bin/python Installing Setuptools...done. Installing Pip....done. This is a temporary environment. It will be deleted when you run 'deactivate'. /tmp/testinstall Unpacking /tmp/testinstall Running setup.py egg_info for package from file:///tmp/testinstall Cleaning up... 

Y la instalación pip del sdist tampoco funciona:

 (4cac61c13d080257)➜ /tmp/testinstall $ python setup.py sdist running sdist # ..snip.. creating dist Creating tar archive removing 'test-1' (and everything under it) (4cac61c13d080257)➜ /tmp/testinstall $ deactivate && mktmpenv && cd - Removing temporary environment: 4cac61c13d080257 Removing 4cac61c13d080257... New python executable in 9a42f3a58809f1a3/bin/python Installing Setuptools...done. Installing Pip...done. This is a temporary environment. It will be deleted when you run 'deactivate'. /tmp/testinstall (9a42f3a58809f1a3)➜ /tmp/testinstall $ ls dist test-1.tar.gz (9a42f3a58809f1a3)➜ /tmp/testinstall $ pip install dist/test-1.tar.gz Unpacking ./dist/test-1.tar.gz Running setup.py egg_info for package from file:///tmp/testinstall/dist/test-1.tar.gz Cleaning up... 

Note la falta de running... y verifying... palabras en ambos.

¿Alguien tiene alguna idea de lo que está pasando aquí?

Me encontré con este problema justo ahora. Parece que hay muchos comandos diferentes a los que pip install my-package puede traducir.

  1. setup.py install
  2. setup.py egg_info
  3. setup.py develop

Así que necesitas manejar cada uno de estos diferentes casos.

 from setuptools.command.install import install from setuptools.command.develop import develop from setuptools.command.egg_info import egg_info ''' BEGIN CUSTOM INSTALL COMMANDS These classes are used to hook into setup.py's install process. Depending on the context: $ pip install my-package Can yield `setup.py install`, `setup.py egg_info`, or `setup.py develop` ''' def custom_command(): import sys if sys.platform in ['darwin', 'linux']: os.system('./custom_command.sh') class CustomInstallCommand(install): def run(self): install.run(self) custom_command() class CustomDevelopCommand(develop): def run(self): develop.run(self) custom_command() class CustomEggInfoCommand(egg_info): def run(self): egg_info.run(self) custom_command() ''' END CUSTOM INSTALL COMMANDS ''' setup( ... cmdclass={ 'install': CustomInstallCommand, 'develop': CustomDevelopCommand, 'egg_info': CustomEggInfoCommand, }, ... ) 

Tuve el mismo problema. Intente ejecutar pip install -vvv : puede ser que los mensajes se estén ocultando de alguna manera (no sé por qué, ¡no soy un experto en pip!). En cualquier caso, puede confirmar que el código se está ejecutando haciendo que su código personalizado se imprima en un archivo en algún lugar en lugar de en STDOUT.

Tratar:

 pip install dist/test-1.tar.gz -U