Могу ли я использовать `pip` вместо` easy_install` для разрешения зависимостей `python setup.py install`?

137

python setup.py installавтоматически установит пакеты, указанные в requires=[]разделе easy_install. Как мне заставить его использовать pipвместо этого?

joeforker
источник

Ответы:

133

Да, ты можешь. Вы можете установить пакет из архива или папки, в Интернете или на своем компьютере. Например:

Установить из tarball в сети

pip install https://pypi.python.org/packages/source/r/requests/requests-2.3.0.tar.gz

Установить из местного архива

wget https://pypi.python.org/packages/source/r/requests/requests-2.3.0.tar.gz
pip install requests-2.3.0.tar.gz

Установить из локальной папки

tar -zxvf requests-2.3.0.tar.gz
cd requests-2.3.0
pip install .

Вы можете удалить requests-2.3.0 папку.

Установить из локальной папки (режим редактирования)

pip install -e .

Это установит пакет в редактируемом режиме . Любые изменения, внесенные в код, будут немедленно применены ко всей системе. Это полезно, если вы являетесь разработчиком пакета и хотите проверить изменения. Это также означает, что вы не можете удалить папку, не нарушая установку.

Полковник паника
источник
10
Если вы привыкли использовать «python setup.py install» для установки пакетов, естественно спросить, как получить «python setup.py install» для разрешения зависимостей с помощью pip, но это неправильный вопрос. Решение состоит в том, чтобы установить пакет с помощью pip и прекратить использовать «setup.py install».
Joeforker
8
Проблема @joeforker в том, что вас могут заставить использовать easy_install, если вы делаете что-то вродеpython setup.py test
TomDotTom
1
@TomDotTom есть идеи о том, как заставить работать pip при запуске setup.py test, пожалуйста?
Ян Сила
@joeforker, пип использует setup.pyза кулисами. Если я хочу, чтобы люди могли устанавливать мой пакет с помощью pip, мне нужно создать setup.pyфайл.
Cowlinator
Если вы хотите доказательства этого, попробуйте pip install -e git+https://github.com/octocat/Hello-World.git#egg=Hello-World. ОшибкаNo such file or directory: 'c:\python\src\Hello-World\setup.py
cowlinator
110

Вы можете pip installфайл, возможно, python setup.py sdistпервым. Вы также можете pip install -e ., как это python setup.py develop.

Джефф Риди
источник
14
Просто замечание для любого, кто пытается это: Обратите внимание, что pip install -eв качестве аргумента используется каталог, а не сам setup.pyфайл. Сначала я не заметил период, в pip install -e .котором я был в замешательстве :)
Маркус Амальтея Магнусон
3
спасибо, с помощью pip install -e .я могу установить, но с помощью pip, как я могу удалить из редактируемого режима?
JuanPablo
2
Редактируемые установки удаляются с помощью обычной 'pip uninstall <имя пакета>'
joeforker
4

Если вы действительно настроены на использование, python setup.py installвы можете попробовать что-то вроде этого:

from setuptools import setup, find_packages
from setuptools.command.install import install as InstallCommand


class Install(InstallCommand):
    """ Customized setuptools install command which uses pip. """

    def run(self, *args, **kwargs):
        import pip
        pip.main(['install', '.'])
        InstallCommand.run(self, *args, **kwargs)


setup(
    name='your_project',
    version='0.0.1a',
    cmdclass={
        'install': Install,
    },
    packages=find_packages(),
    install_requires=['simplejson']
)
TomDotTom
источник
1
Спасибо, но я сталкиваюсь с рекурсивным обратным вызовом с использованием этого метода. когда я использую 'python setup.py install', он вызывает Install.run для вызова pip install., эта функция вызывает Install. беги снова ...
Люмен