Pip не собирает пользовательский набор cmdclass
поэтому я нашел этот ответ
на мой точный вопрос, но по какой-то причине он не работает:
$ 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}
)
Но тогда, хотя setup.py install
работает::
➜ /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........
(Обратите внимание на строки running...
и verifying......
)
pip install
каталога не работает:
(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...
И программа установки sdist не работает:
(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...
Обратите внимание на отсутствие слов running...
и verifying...
в обоих из них.
Кто-нибудь знает, что здесь происходит?
Ответы
Ответ 1
Я столкнулся с той же проблемой. Попробуйте запустить pip install -vvv <path>
- возможно, сообщения скрываются каким-то образом (я не знаю, почему - не эксперт по протоколу!). В любом случае, вы можете подтвердить, что код запускается, когда вы печатаете свой собственный код в файл где-то вместо STDOUT.
Ответ 2
Я столкнулся с этой проблемой только сейчас. Похоже, есть много разных команд, которые pip install my-package
может перевести.
-
setup.py install
-
setup.py egg_info
-
setup.py develop
Итак, вам нужно обрабатывать каждый из этих разных случаев.
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 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,
},
...
)
Ответ 3
Try:
pip install dist/test-1.tar.gz -U