Saya biasanya menginstal paket python melalui pip.
Untuk Google App Engine, saya perlu menginstal paket ke direktori target lain.
Saya sudah mencoba:
pip install -I flask-restful --target ./lib
tetapi gagal dengan:
harus menyediakan rumah atau awalan / exec-awalan - tidak keduanya
Bagaimana saya bisa membuatnya bekerja?
pip install
operasi normal :(--target
sementara tidak merusakpip install
perilaku default ?Saya percaya ada solusi yang lebih sederhana untuk masalah ini (Homebrew's Python on macOS) yang tidak akan merusak operasi pip normal Anda.
Yang harus Anda lakukan adalah membuat
setup.cfg
file di direktori root proyek Anda, biasanya di mana__init__.py
file py utama atau file executable Anda berada. Jadi jika folder root proyek Anda adalah/path/to/my/project/
:, buatsetup.cfg
file di sana dan masukkan kata-kata ajaib di dalamnya:OK, sekarang Anda dapat menjalankan perintah pip untuk folder itu:
Perintah ini akan berjalan dengan anggun untuk folder itu saja. Cukup salin
setup.cfg
ke proyek lain apa pun yang mungkin Anda miliki. Tidak perlu menulis.pydistutils.cfg
di direktori home Anda.Setelah Anda selesai menginstal modul, Anda dapat menghapus
setup.cfg
.sumber
setup.cfg
setelah instalasi. Saya terbakar melalui 2 hari penuh mencoba mencari tahu mengapa lingkungan virtualenv saya kacau, dengan kesalahan sepertiCould not install packages due to an EnvironmentError: [Errno 1] Operation not permitted: '/bin/easy_install'
. Menghapus file setup mengembalikan kewarasan sayaPada OSX (mac), dengan asumsi folder proyek bernama / var / myproject
cd /var/myproject
setup.cfg
dan tambahkan[install] prefix=
pip install <packagename> -t .
sumber
-t .
bukannya tinggal di luar direktori. Cara ini bekerja untuk saya dan yang lainnya tidak, meskipun saya tidak tahu mengapa.Solusi lain * untuk pengguna Homebrew adalah menggunakan a
virtualenv
.Tentu saja, itu mungkin menghapus kebutuhan untuk direktori target - tetapi bahkan jika tidak, saya telah menemukan
--target
karya secara default (seperti pada, tanpa membuat / memodifikasi file konfigurasi) ketika dalam lingkungan virtual.* Saya katakan solusi; mungkin itu hanya motivasi lain untuk menggunakan vena dengan cermat ...
sumber
Saya menemukan kesalahan dengan rekomendasi lain di sekitar
--install-option="--prefix=lib"
. Satu-satunya hal yang saya temukan yang berfungsi adalah menggunakanPYTHONUSERBASE
seperti yang dijelaskan di sini .ini tidak persis sama dengan
--target
, tetapi itu memang trik untuk saya dalam hal apapun.sumber
Seperti disebutkan lainnya, ini dikenal bug dengan pip & python diinstal dengan homebrew.
Jika Anda membuat
~/.pydistutils.cfg
file dengan instruksi "kosong awalan" itu akan memperbaiki masalah ini tetapi itu akan merusak operasi pip normal.Sampai bug ini ditangani secara resmi, salah satu opsi adalah membuat skrip bash Anda sendiri yang akan menangani kasus ini:
Script ini membungkus perintah Anda dan:
~/.pydistutils.cfg
file dengan instruksi "kosong awalan" di dalamnya~/.pydistutils.cfg
fileScript ini dapat diubah dan disesuaikan untuk memenuhi kebutuhan Anda tetapi Anda mendapatkan ide. Dan itu memungkinkan Anda untuk menjalankan perintah Anda tanpa mengerem pip. Semoga bermanfaat :)
sumber
Jika Anda menggunakan virtualenv *, mungkin ide yang baik untuk memeriksa ulang apakah
which pip
Anda menggunakan.Jika Anda melihat sesuatu seperti
/usr/local/bin/pip
Anda keluar dari lingkungan Anda. Mengaktifkan kembali virtualenv Anda akan memperbaikinya:VirtualEnv:
$ source bin/activate
VirtualFish:
$ vf activate [environ]
*: Saya menggunakan virtualfish, tetapi saya menganggap tip ini relevan untuk keduanya.
sumber
Saya memiliki masalah serupa. Saya menggunakan flag --system untuk menghindari kesalahan saat saya mendekripsi di sini di utas lain tempat saya menjelaskan kasus spesifik dari situasi saya. Saya posting ini di sini mengharapkan yang dapat membantu siapa pun menghadapi masalah yang sama
sumber