Saya tahu jawaban yang jelas adalah dengan menggunakan virtualenv dan virtualenvwrapper, tetapi karena berbagai alasan saya tidak bisa / tidak ingin melakukan itu.
Jadi bagaimana cara memodifikasi perintah
pip install package_name
untuk membuat pip
instal paket di tempat selain default site-packages
?
pip
JANGAN mencoba untuk menghapus dan versi yang lebih lama dari direktori non-kustom. Misalnya - sistem yang luas, di mana Anda tidak memiliki izin menulis. Sejauh ini saya hanya melakukan ini denganeasy_install
...--ignore-installed
opsi harus mencegah pip dari mencoba untuk menghapus paket yang sudah diinstal.mkvirtualenv --python=/usr/bin/python3.5 env_name
Jawaban:
Menggunakan:
Anda mungkin juga ingin menggunakan
--ignore-installed
untuk memaksa semua dependensi diinstal ulang menggunakan awalan baru ini. Anda dapat menggunakan--install-option
beberapa kali untuk menambahkan opsi yang dapat Anda gunakanpython setup.py install
(--prefix
mungkin itu yang Anda inginkan, tetapi ada banyak opsi yang dapat Anda gunakan).sumber
pip freeze
melihat direktori alternatif?PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freeze
itu akan melihatnya.--prefix=$PREFIX_PATH
tampaknya tidak memungkinkan untuk memiliki kontrol penuh terhadap direktori instalasi karena ada sufiks khusus sistem yang ditambahkan padanya (\Lib\site-packages
pada Windows misalnya). Apakah ada cara untuk menentukan direktori tertentu?The --target switch adalah hal yang Anda cari:
Tapi Anda masih perlu menambahkan
d:\somewhere\other\than\the\default
untukPYTHONPATH
benar-benar menggunakan mereka dari lokasi itu.Tingkatkan pip jika sakelar target tidak tersedia:
Di Linux atau OS X:
Di Windows (ini mengatasi masalah ):
sumber
pip install --upgrade pip
!--install-option="--prefix=$PREFIX_PATH"
disebutkan oleh @Ian Bicking dan--target=$PATH
opsinya?target
adalah opsi pip, dan semua yang Anda masukkaninstall-option
akan diteruskan kesetup.py install command
. Pada dasarnyatarget
adalah lokasi paket situs kustom.--target
dapat mengakibatkan instalasi parsial, karena tidak akan menginstal skrip / file data termasuk dalam awalan yang ditentukan. Sepertinya lulus--prefix
dengan--install-option
adalah satu-satunya cara yang tepat untuk memiliki kontrol penuh atas awalan instalasi yang digunakan.Alih-alih
--target
opsi atau--install-options
opsi, saya menemukan bahwa berikut ini berfungsi dengan baik (dari diskusi tentang bug tentang hal ini di https://github.com/pypa/pip/issues/446 ):(Atau atur
PYTHONUSERBASE
direktori di lingkungan Anda sebelum menjalankan perintah, menggunakanexport PYTHONUSERBASE=/path/to/install/to
)Ini menggunakan sangat berguna
--user
pilihan tetapi mengatakan itu untuk membuatbin
,lib
,share
dan direktori lain yang Anda harapkan di bawah awalan kustom daripada$HOME/.local
.Kemudian Anda dapat menambahkan ini ke variabel Anda
PATH
,PYTHONPATH
dan lainnya seperti pada direktori instalasi normal.Perhatikan bahwa Anda mungkin juga perlu menentukan opsi
--upgrade
dan--ignore-installed
jika ada paket di mana ini tergantung memerlukan versi yang lebih baru untuk diinstal diPYTHONUSERBASE
direktori, untuk menimpa versi yang disediakan sistem.Contoh lengkap:
..untuk menginstal
scipy
dannumpy
mengemas versi terbaru ke dalam direktori yang dapat Anda sertakan diPYTHONPATH
like Anda (menggunakan bash dan untuk python 2.6 pada CentOS 6 untuk contoh ini):Menggunakan virtualenv masih merupakan solusi yang lebih baik dan lebih rapi!
sumber
/bin
folder pip dibuat,--user
membuatnya seperti halnya--PREFIX
sedangkan--target
tidak.--ignore-installed
diperlukan.--editable
dan pemasangan lokal.su
berkeliling (yang mungkin bermasalah dalam wadah, misalnya).Menginstal paket Python seringkali hanya menyertakan beberapa file Python murni. Jika paket termasuk data, skrip dan atau file yang dapat dieksekusi, ini diinstal di direktori yang berbeda dari file Python murni.
Dengan asumsi paket Anda tidak memiliki data / skrip / executable, dan Anda ingin file Python Anda masuk
/python/packages/package_name
(dan bukan beberapa subdirektori beberapa tingkat di bawah ini/python/packages
ketika menggunakan--prefix
), Anda dapat menggunakan perintah satu kali:Jika Anda ingin semua (atau sebagian besar) paket Anda pergi ke sana, Anda dapat mengedit Anda
~/.pip/pip.conf
untuk memasukkan:Dengan begitu Anda tidak bisa lupa harus menentukannya lagi dan lagi.
Setiap file / skrip / data yang dapat dieksekusi yang termasuk dalam paket akan tetap pergi ke tempat default kecuali jika Anda menentukan opsi instalasi tambahan (
--prefix
/--install-data
/--install-scripts
, dll., Untuk detail lihat opsi instalasi kustom ).sumber
--prefix
sana, karena saya memiliki direktori "lokal" pada server bersama di direktori home, dan itu digunakan sebagai awalaneasy_install
sebelum saya pindah kepip
. Sistem$PATH
dan$PYTHONPATH
dikonfigurasikan sebelumnya. Alih-alihinstall-option=--install-purelib=/blah
adatarget=/blah
opsi / switch yang lebih baru ini . Ini juga bagus, tetapi kadang-kadang Anda hanya membutuhkan pengganti--prefix
, yang akan Anda gunakan dengansetup.py
ataueasy_install
.Untuk memasang perpustakaan di tempat yang saya inginkan, saya menavigasi ke lokasi yang saya inginkan direktori dengan terminal kemudian digunakan
logika yang saya ambil dari halaman ini: https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/download
sumber
-t
adalah singkatan untuk--target
Sepertinya tidak ada yang menyebutkan opsi -t tetapi yang paling mudah:
sumber
-t
pilihan adalah versi pendek dari--target
pilihan yang telah dijelaskan dalam jawaban lain ( stackoverflow.com/a/19404371/594053 ) :)Tambahkan saja satu poin ke jawaban @Ian Bicking:
Menggunakan
--user
opsi untuk menentukan direktori yang diinstal juga berfungsi jika seseorang ingin menginstal beberapa paket Python ke direktori home seseorang (tanpa hak pengguna sudo) pada server jauh.Misalnya,
Perintah akan menginstal paket ke salah satu direktori yang terdaftar di PYTHONPATH Anda.
sumber
Diuji opsi ini dengan python3.5 dan pip 9.0.3:
pip install --target / myfolder [paket]
Instal SEMUA paket termasuk dependensi pada / myfolder. Tidak memperhitungkan bahwa paket dependen sudah diinstal di tempat lain dengan Python. Anda akan menemukan paket dari / myfolder / [package_name]. Jika Anda memiliki beberapa versi Python, ini tidak memperhitungkannya (tidak ada versi Python dalam nama folder paket).
instal pip --prefix / myfolder [paket]
Cek adalah dependensi yang sudah diinstal. Akan menginstal paket ke /myfolder/lib/python3.5/site-packages/[packages]
install pip --root / myfolder [paket]
Memeriksa dependensi seperti --prefix tetapi lokasi instal adalah /myfolder/usr/local/lib/python3.5/site-packages/[package_name].
pip install --user [paket]
Akan menginstal paket ke $ HOME: /home/[USER[/.local/lib/python3.5/site-packages Python mencari secara otomatis dari .local path ini sehingga Anda tidak perlu memasukkannya ke PYTHONPATH Anda.
=> Dalam sebagian besar kasus --user adalah pilihan terbaik untuk digunakan. Jika folder rumah tidak dapat digunakan karena beberapa alasan maka --prefix.
sumber
Versi yang lebih baru dari
pip
(8 atau lebih baru) dapat langsung menggunakan--prefix
opsi :di mana
$PREFIX_PATH
awalan instalasi tempat lib, nampan dan folder tingkat atas lainnya ditempatkan.sumber
atau
sumber
Untuk menambah saran yang sudah baik, karena saya memiliki masalah menginstal IPython ketika saya tidak memiliki izin menulis
/usr/local
.pip menggunakan distutils untuk melakukan instalasinya dan utas ini membahas bagaimana hal itu dapat menyebabkan masalah karena bergantung pada
sys.prefix
pengaturan.Masalah saya terjadi ketika instalasi IPython mencoba menulis ke '/ usr / local / share / man / man1' dengan Izin ditolak . Ketika instalasi gagal tampaknya tidak menulis file IPython di direktori bin.
Menggunakan "--user" berfungsi dan file ditulis ke ~ / .local. Menambahkan ~ / .local / bin ke $ PATH berarti saya bisa menggunakan "ipython" dari sana.
Namun saya mencoba untuk menginstal ini untuk sejumlah pengguna dan telah diberi izin menulis ke
/usr/local/lib/python2.7
direktori. Saya membuat direktori "bin" di bawah sana dan mengatur arahan untuk distutils:then (
-I
digunakan untuk memaksa instalasi meskipun gagal sebelumnya / .local install):Lalu aku menambahkan
/usr/local/lib/python2.7/bin
untuk$PATH
.Saya pikir saya akan memasukkan ini jika ada orang lain yang memiliki masalah serupa pada mesin yang mereka tidak memiliki akses sudo.
sumber
Jika Anda menggunakan minuman dengan python, sayangnya, pip / pip3 dikirimkan dengan opsi yang sangat terbatas. Anda tidak memiliki opsi --install-option, --target, --user seperti yang disebutkan di atas.
Anda mungkin menemukan kalimat ini sangat tidak praktis. Saya sarankan gunakan pyenv untuk manajemen. Jika Anda menggunakan
brew upgrade python python3
Ironisnya Anda sebenarnya menurunkan fungsi pip.
(Saya memposting jawaban ini, hanya karena pip di mac osx saya tidak memiliki opsi --target, dan saya telah menghabiskan berjam-jam memperbaikinya)
sumber
ignore-installed
karena upaya sebelumnya, bekerja untuk saya:python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
Dengan pip
v1.5.6
pada Pythonv2.7.3
(GNU / Linux), opsi--root
memungkinkan untuk menentukan awalan instalasi global, (tampaknya) terlepas dari opsi paket tertentu. Coba fi,sumber
Saya sarankan untuk mengikuti dokumentasi dan membuat file ~ / .pip / pip.conf. Catatan dalam dokumentasi ada tidak ada direktori header yang ditentukan, yang mengarah ke kesalahan berikut:
Konten conf file yang berfungsi penuh adalah:
Sayangnya saya dapat menginstal, tetapi ketika mencoba untuk menghapus pip memberitahu saya tidak ada paket untuk proses penghapusan .... jadi ada sesuatu yang salah tetapi paket pergi ke lokasi yang telah ditentukan.
sumber
pip install /path/to/package/
sekarang mungkin.
Bedanya dengan ini dan menggunakan
-e
atau--editable
bendera adalah bahwa-e
tautan ke tempat paket disimpan (yaitu folder unduhan Anda), daripada menginstalnya ke jalur python Anda.Ini berarti jika Anda menghapus / memindahkan paket ke folder lain, Anda tidak akan dapat menggunakannya.
sumber
Saya menemukan cara sederhana
sumber - https://pip.pypa.io/en/stable/reference/pip_install/
Saya mencobanya dengan pip3 dan berhasil!
sumber