Dapatkah saya menggunakan `pip` daripada ʻeasy_install` untuk resolusi ketergantungan` python setup.py install`?

139

python setup.py installsecara otomatis akan menginstal paket yang terdaftar dalam requires=[]menggunakan easy_install. Bagaimana cara saya menggunakannya pip?

joeforker
sumber

Jawaban:

137

Ya kamu bisa. Anda dapat menginstal paket dari tarball atau folder, di web atau komputer Anda. Sebagai contoh:

Instal dari tarball di web

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

Instal dari tarball lokal

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

Instal dari folder lokal

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

Anda dapat menghapus requests-2.3.0folder tersebut.

Instal dari folder lokal (mode yang dapat diedit)

pip install -e .

Ini menginstal paket dalam mode yang dapat diedit . Setiap perubahan yang Anda buat pada kode akan segera diterapkan di seluruh sistem. Ini berguna jika Anda adalah pengembang paket dan ingin menguji perubahan. Ini juga berarti Anda tidak dapat menghapus folder tanpa merusak instalasi.

Kolonel Panik
sumber
11
Jika Anda terbiasa menggunakan "python setup.py install" untuk menginstal paket, wajar jika Anda bertanya bagaimana cara mendapatkan "python setup.py install" untuk menyelesaikan ketergantungan dengan pip, tetapi itu pertanyaan yang salah. Solusinya adalah menginstal paket dengan pip dan berhenti menggunakan "setup.py install".
joeforker
8
Masalah @joeforker adalah Anda mungkin terpaksa menggunakan easy_install jika Anda melakukan sesuatu sepertipython setup.py test
TomDotTom
1
@TomDotTom ada ide tentang cara memaksa menggunakan pip saat menjalankan setup.py test?
Jan Sila
@joeforker, pip menggunakan di setup.pybelakang layar. Jika saya ingin orang-orang dapat menginstal paket saya dengan pip, saya perlu membuat setup.pyfile.
cowlinator
Jika Anda ingin buktinya, cobalah pip install -e git+https://github.com/octocat/Hello-World.git#egg=Hello-World. Kesalahannya adalahNo such file or directory: 'c:\python\src\Hello-World\setup.py
cowlinator
110

Anda dapat pip installmembuat file mungkin dengan yang python setup.py sdistpertama. Anda juga bisa pip install -e .yang suka python setup.py develop.

Geoff Reedy
sumber
14
Perlu diketahui siapa saja yang mencoba ini: Perhatikan bahwa pip install -emengambil direktori sebagai argumen, bukan setup.pyfile itu sendiri. Pada awalnya saya tidak memperhatikan periode pip install -e .yang membuat saya bingung :)
Markus Amalthea Magnuson
3
terima kasih, dengan pip install -e .saya dapat menginstal tetapi dengan pip, bagaimana saya dapat menghapus penginstalan dari mode yang dapat diedit?
JuanPablo
2
Instalasi yang dapat diedit dihapus dengan 'pip uninstall <package name>' biasa
joeforker
4

Jika Anda benar-benar ingin menggunakannya, python setup.py installAnda dapat mencoba sesuatu seperti ini:

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
sumber
1
Terima kasih, tetapi saya menghadapi panggilan balik rekursif menggunakan metode ini. ketika saya menggunakan 'python setup.py install', itu akan memanggil Install.run untuk memanggil pip install., fungsi ini akan memanggil Install. lari lagi ...
Lumen