Apakah mungkin untuk menginstal paket menggunakan pip dari sistem file lokal?
Saya telah menjalankan python setup.py sdist
untuk paket saya, yang telah membuat file tar.gz yang sesuai. File ini disimpan di sistem saya di /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
Sekarang di lingkungan virtual saya ingin menginstal paket baik yang berasal dari pypi atau dari lokasi lokal tertentu /srv/pkg
.
Apakah ini mungkin?
PS
Saya tahu bahwa saya bisa menentukan pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
. Itu akan berhasil, tetapi saya berbicara tentang menggunakan /srv/pkg
lokasi sebagai tempat lain untuk mencari pip jika saya mengetik pip install mypackage
.
pip install <Path-to-WHL-file>
.Jawaban:
Saya cukup yakin apa yang Anda cari disebut
--find-links
opsi.Meskipun Anda mungkin perlu membuat dummy
index.html
untuk indeks paket lokal Anda yang mencantumkan tautan ke semua paket. Alat ini membantu:https://github.com/wolever/pip2pi
sumber
pip install mypackage --no-index --find-links file:///srv/pkg/mypackage
harus bekerja.easy_install --allow-hosts=None --find-links file:///srv/pkg/mypackage mypackage
--find-links
masih akan memungkinkan pencarian di PyPI jika paket tidak ditemukan di lokasi yang ditentukan atau jika versi yang lebih baru tersedia. Di Windows, saya menemukan bahwa menggabungkan ini dengan--only-binary=packagename
(atau--only-binary=:all:
) sangat berguna. Ini mencegah pip dari mencoba mengunduh paket dengan dependensi asli yang hanya memiliki distribusi sumber pada PyPI (dan karenanya memerlukan kompilasi), yang merupakan alasan paling umum saya harus mencoba untuk menginstal dari direktori. Tidak seperti itu--no-index
, saya masih dapat menginstal paket lain dari PyPI.Bagaimana dengan::
misalnya,
pip install -e /srv/pkg
di mana / srv / pkg adalah direktori tingkat atas tempat 'setup.py' dapat ditemukan.
sumber
--editable
tampaknya melihat ke direktori paket lokal dan mengatur sumber sebagai repo git jika ada satu - sedikit lebih fleksibel daripada hanya folder. Saya tidak dapat menemukan dokumentasi untuk ini.do pip install -e
memeriksa kode dari remote git, saya ingin menginstal kode apa adanya (dengan perubahan yang belum ada di remote).Saya menginstal
pyfuzzy
tetapi tidak dalam PyPI; ia mengembalikan pesan:No matching distribution found for pyfuzzy
.Saya mencoba jawaban yang diterima
Tapi itu tidak berhasil dan mengembalikan kesalahan berikut:
Akhirnya, saya menemukan cara sederhana yang bagus di sana: https://pip.pypa.io/en/latest/reference/pip_install.html
Jadi perintah berikut bekerja untuk saya:
Semoga ini bisa membantu Anda.
sumber
Could not find a version that satisfies
kesalahan. Terima kasih.Ini adalah solusi yang akhirnya saya gunakan:
Saya mengumpulkan ini bersama-sama dari contoh instalasi pip dan juga dari jawaban Rikard pada pertanyaan lain . Argumen "--pre" memungkinkan Anda menginstal versi non-produksi. Argumen "--no-index" menghindari pencarian indeks PyPI. "--Find-links =." pencarian argumen di folder lokal (ini bisa relatif atau absolut). Saya menggunakan argumen "--log-file", "log.txt", dan "-vv" untuk debugging. Argumen "--upgrade" memungkinkan Anda menginstal versi yang lebih baru dari yang lebih lama.
Saya juga menemukan cara yang bagus untuk menghapus instalasi mereka. Ini berguna ketika Anda memiliki beberapa lingkungan Python yang berbeda. Ini format dasar yang sama, hanya menggunakan "uninstall" alih-alih "install", dengan langkah keamanan untuk mencegah pencopotan pemasangan yang tidak diinginkan:
Folder lokal berisi file-file ini: install.py, uninstall.py, mypackagename-1.0.zip
sumber
Opsi --find-links berfungsi dan bekerja dari
requirements.txt
file!Anda dapat meletakkan arsip paket di beberapa folder dan mengambil yang terbaru tanpa mengubah file persyaratan, misalnya
requirements
:Sekarang
requirements/base.txt
dimasukkan:Cara yang rapi untuk memperbarui paket eksklusif, cukup masukkan yang baru di folder
Dengan cara ini Anda dapat menginstal paket dari
local folder
DANpypi
dengan satu panggilan yang sama:pip install -r requirements/production.txt
PS. Lihat garpu cookiecutter-djangopackage saya untuk melihat cara membagi persyaratan dan menggunakan organisasi persyaratan berbasis folder.
sumber
Dari halaman install-paket Anda cukup menjalankan:
di mana / srv / pkg / mypackage adalah direktori, berisi setup.py .
Selain itu 1 , Anda dapat menginstalnya dari file arsip:
1 Meskipun disebutkan dalam pertanyaan, karena popularitasnya, itu juga termasuk.
sumber
Dengan asumsi Anda memiliki virtualenv dan
requirements.txt
file, maka Anda dapat menentukan di dalam file ini di mana mendapatkan paket:sumber
Memiliki persyaratan dalam
requirements.txt
danegg_dir
sebagai direktoriAnda dapat membangun cache lokal Anda:
$ pip download -r requirements.txt -d eggs_dir
kemudian, menggunakan "cache" itu sederhana seperti:
$ pip install -r requirements.txt --find-links=eggs_dir
sumber
Untuk menginstal hanya dari lokal Anda memerlukan 2 opsi:
--find-links
: tempat mencari dependensi. Tidak perlufile://
awalan yang disebutkan oleh orang lain.--no-index
: jangan lihat di indeks pypi untuk dependensi yang hilang (dependensi tidak diinstal dan tidak di--find-links
jalur).Jadi Anda bisa lari dari folder apa saja berikut ini:
Jika mypackage Anda telah diatur dengan benar, ia akan mencantumkan semua dependensinya, dan jika Anda menggunakan unduhan pip untuk mengunduh kaskade dependensi (mis. Dependensi depency, dll.), Semuanya akan berfungsi.
Jika Anda ingin menggunakan indeks pypi jika dapat diakses, tetapi mundur ke roda lokal jika tidak, Anda dapat menghapus
--no-index
dan menambahkan--retries 0
. Anda akan melihat pip pause sebentar ketika sedang mencoba memeriksa pypi untuk dependensi yang hilang (satu tidak terinstal) dan ketika ternyata tidak dapat mencapainya, akan kembali ke lokal. Sepertinya tidak ada cara untuk memberitahu pip untuk "mencari yang lokal dulu, lalu indeks".sumber
Saya sudah berusaha untuk mencapai sesuatu yang sangat sederhana dan gagal total, mungkin saya bodoh.
Lagi pula, jika Anda memiliki skrip /
Dockerfile
yang mengunduh file zip paket python (mis. Dari GitHub) dan Anda ingin menginstalnya, Anda dapat menggunakanfile:///
awalan untuk menginstalnya seperti yang ditunjukkan dalam contoh berikut :CATATAN : Saya tahu Anda dapat menginstal paket langsung menggunakan
pip install https://example.com/mypackage.zip
tetapi dalam kasus saya saya ingin memverifikasi checksum (tidak pernah cukup paranoid) dan saya gagal total ketika mencoba menggunakan berbagai opsi yang disediakan pip /#md5
fragmen.Mengejutkan karena melakukan sesuatu yang begitu sederhana secara langsung membuat frustrasi
pip
. Saya hanya ingin melewati sebuah checksum danpip
memverifikasi bahwa zip sudah cocok sebelum menginstalnya.Saya mungkin melakukan sesuatu yang sangat bodoh tetapi pada akhirnya saya menyerah dan memilih untuk ini. Saya harap ini membantu orang lain mencoba melakukan sesuatu yang serupa.
sumber