Czy mogę użyć `pip` zamiast` easy_install` do rozwiązania zależności `python setup.py install`?

137

python setup.py installautomatycznie zainstaluje pakiety wymienione w requires=[]using easy_install. Jak mam go używać pipzamiast tego?

joeforker
źródło

Odpowiedzi:

133

Tak, możesz. Możesz zainstalować pakiet z archiwum tar lub folderu, w Internecie lub na komputerze. Na przykład:

Zainstaluj z archiwum tar w sieci

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

Zainstaluj z lokalnego archiwum

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

Zainstaluj z folderu lokalnego

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

Możesz usunąć requests-2.3.0folder.

Zainstaluj z folderu lokalnego (tryb edytowalny)

pip install -e .

Spowoduje to zainstalowanie pakietu w trybie edytowalnym . Wszelkie zmiany wprowadzone w kodzie zostaną natychmiast zastosowane w całym systemie. Jest to przydatne, jeśli jesteś deweloperem pakietów i chcesz przetestować zmiany. Oznacza to również, że nie możesz usunąć folderu bez przerywania instalacji.

Colonel Panic
źródło
10
Jeśli jesteś przyzwyczajony do używania „python setup.py install” do instalowania pakietów, naturalne jest pytanie, jak uzyskać „python setup.py install”, aby rozwiązać zależności z pip, ale to jest złe pytanie. Rozwiązaniem jest zainstalowanie pakietu za pomocą pip i zaprzestanie używania „setup.py install”.
joeforker
8
Problem @joeforker polega na tym, że możesz być zmuszony do skorzystania z easy_install, jeśli zrobisz coś takiegopython setup.py test
TomDotTom
1
@TomDotTom masz jakiś pomysł, jak wymusić użycie pip podczas uruchamiania setup.py test?
Jan Sila
@joeforker, pip używa setup.pyza kulisami. Jeśli chcę, aby ludzie mogli instalować mój pakiet za pomocą pip, muszę utworzyć setup.pyplik.
cowlinator
Jeśli chcesz tego dowieść, spróbuj pip install -e git+https://github.com/octocat/Hello-World.git#egg=Hello-World. Błąd toNo such file or directory: 'c:\python\src\Hello-World\setup.py
cowlinator
110

Możesz najpierw pip installutworzyć plik python setup.py sdist. Możesz także, pip install -e .co jest podobne python setup.py develop.

Geoff Reedy
źródło
14
Uwaga dla każdego, kto spróbuje tego: Zauważ, że pip install -ejako argument przyjmuje katalog, a nie setup.pysam plik. Na początku nie zauważyłem okresu, w pip install -e .którym wprowadził mnie trochę zamieszania :)
Markus Amalthea Magnuson
3
dzięki, pip install -e .mogę zainstalować, ale pip, jak mogę odinstalować z trybu edycji?
JuanPablo,
2
Edytowalne instalacje są odinstalowywane za pomocą zwykłego 'pip uninstall <nazwa pakietu>'
joeforker
4

Jeśli naprawdę python setup.py installchcesz używać, możesz spróbować czegoś takiego:

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
źródło
1
Dziękuję, ale mam do czynienia z rekurencyjnym wywołaniem zwrotnym przy użyciu tej metody. kiedy używam 'python setup.py install', wywoła Install.run, aby wywołać pip install., ta funkcja wywoła Install. biegnij ponownie ...
Lumen