Dari pip install --help
:
--user Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
Windows. (See the Python documentation for site.USER_BASE for full details.)
Dokumentasi untuk situs.USER_BASE adalah lubang cacing yang mengerikan dari materi * NIX menarik yang tidak saya mengerti.
Apa tujuan dari --user
bahasa Inggris biasa? Mengapa intalling paket menjadi ~/.local/
penting? Mengapa tidak meletakkan executable di suatu tempat di $ PATH saya?
python
python-3.x
pip
virtualenv
Rob Truxal
sumber
sumber
import site; print site.USER_SITE
mencetak lokasi pemasangan. Bagi saya, saya mengerti/${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages
./usr/local/lib/pythonX.X/dist-packages
adalah direktori default untuk paket yang diinstal oleh pip . Tetapi jika satu pengguna ingin menginstal paket khusus pengguna, mereka dapat menggunakannya$ sudo pip3 --user install some_package
. Paket itu akan tetap tidak tersedia untuk grup dan orang lain yang mengakses host itu.Jawaban:
pip default untuk menginstal paket Python ke direktori sistem (seperti
/usr/local/lib/python3.4
). Ini membutuhkan akses root.--user
jadikan paket instalasi pip di direktori home Anda, yang tidak memerlukan hak khusus.sumber
--user
untuk memastikan bahwa seseorang tidak menjalankan paket sebagai root? (Saya membayangkan sesuatu yang mirip dengan opsi Wireshark / kismet / burpsuite untuk membuat kebijakan akses grup, sehingga tidak mengizinkan semua fitur program berjalan sebagai root. Apakah itu di jalur yang benar?) Atau apakah--user
opsi itu hanya dimaksudkan untuk mengizinkan instalasi tanpa hak root? Jika itu masalahnya, mengapa saya tidak pernah menggunakansudo pip install foo_package
? Saya tidak pernah membutuhkan root-privelage untuk diinstal melalui pip sebelumnya.--user
param adalah tentang pengguna-isolasi! Itu seperti ammt akal yang tidak masuk akal. Terima kasih @NDEthos!pip freeze --user
?--user
menginstal disite.USER_SITE
.Untuk kasus saya, itu
/Users/.../Library/Python/2.7/bin
. Jadi saya telah menambahkan itu ke PATH saya (dalam~/.bash_profile
file):sumber
Jawaban lain menyebutkan
site.USER_SITE
tempat paket Python ditempatkan. Jika Anda mencari binari, ini masuk{site.USER_BASE}/bin
.Jika Anda ingin menambahkan direktori ini ke jalur pencarian shell Anda, gunakan:
sumber
Hanya peringatan:
Menurut masalah ini ,
--user
saat ini tidak valid di dalam virtual env'spip
, karena lokasi pengguna tidak benar-benar masuk akal untuk lingkungan virtual.Jadi jangan gunakan
pip install --user some_pkg
di dalam lingkungan virtual , jika tidak, lingkungan virtualpip
akan bingung. Lihat jawaban ini untuk lebih jelasnya.sumber
Cara terbaik adalah menginstal
virtualenv
dan tidak memerlukan--user
kebingungan. Anda akan mendapatkan lebih banyak fleksibilitas dan tidak perlu khawatir mengenai berbagai versi dan proyek python yang berbeda setiap kali Anda memasang paket.https://virtualenv.pypa.io/en/stable/
sumber
Di macOS, alasan untuk menggunakan
--user
flag adalah untuk memastikan kami tidak merusak pustaka yang diandalkan OS. Sebuah konservatif pendekatan untuk pengguna banyak MacOS adalah untuk menghindari menginstal atau memperbarui pip dengan perintah yang membutuhkansudo
. Dengan demikian, ini termasuk menginstal ke/usr/local/bin
...Ref: Menginstal python untuk Neovim ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )
Saya tidak semua jelas mengapa menginstal ke
/usr/local/bin
dalam risiko pada Mac mengingat fakta bahwa sistem hanya bergantung pada python biner di/Library/Frameworks/
dan/usr/bin
. Saya menduga itu karena seperti yang disebutkan di atas, menginstal ke dalam/usr/local/bin
mengharuskansudo
yang membuka pintu untuk membuat kesalahan mahal dengan perpustakaan sistem. Jadi, memasang ke~/.local/bin
adalah cara yang pasti untuk menghindari risiko ini.Ref: Menggunakan python di Mac ( https://docs.python.org/2/using/mac.html )
Akhirnya, pada tingkat ada manfaat menginstal paket ke
/usr/local/bin
, saya ingin tahu apakah masuk akal untuk mengubah pemilik direktori dariroot
keuser
? Ini akan menghindari keharusan menggunakansudo
sambil tetap melindungi dari melakukan perubahan yang bergantung pada sistem. * Apakah ini default keamanan peninggalan tentang bagaimana sistem Unix lebih sering digunakan di masa lalu (sebagai server)? Atau minimal, hanya cara yang baik untuk pengguna Mac yang tidak meng-hosting server?* Catatan: Fitur Perlindungan Integritas Sistem (SIP) Mac juga tampaknya melindungi pengguna dari perubahan pustaka yang bergantung pada sistem.
- E
sumber
Tanpa Lingkungan Virtual
pip <command> --user
mengubah ruang lingkup perintah pip saat ini untuk bekerja pada lokasi pemasangan paket python lokal akun pengguna saat ini, daripada lokasi pemasangan paket seluruh sistem, yang merupakan default.Ini hanya penting pada mesin multi-pengguna. Apa pun yang diinstal ke lokasi sistem akan terlihat oleh semua pengguna, jadi menginstal ke lokasi pengguna akan membuat instalasi paket terpisah dari pengguna lain (mereka tidak akan melihatnya, dan harus menginstalnya sendiri secara terpisah untuk menggunakannya). Karena mungkin ada konflik versi, menginstal paket dengan dependensi yang dibutuhkan oleh paket lain dapat menyebabkan masalah, jadi sebaiknya jangan mendorong semua paket yang digunakan pengguna ke lokasi pemasangan sistem.
--user
lokasi. Ini akan diinstal ke folder yang berbeda, yang mungkin atau mungkin tidak perlu ditambahkan ke path, tergantung pada paket dan bagaimana itu digunakan (banyak paket menginstal alat baris perintah yang harus di path untuk menjalankan dari shell) .--user
lebih disukai menggunakan root / sudo atau membutuhkan instalasi administrator dan memengaruhi lingkungan Python setiap pengguna, kecuali dalam kasus paket umum yang ingin disediakan administrator untuk semua pengguna secara default.apt
, daripadapip
.Dengan Lingkungan Virtual
venv
perintah di Python VENV docs .The
--user
pilihan di lingkungan venv / virtualenv aktif akan menginstal ke lokasi pengguna python lokal (sama seperti tanpa lingkungan virtual).Paket diinstal ke lingkungan virtual secara default, tetapi jika Anda menggunakannya
--user
akan memaksanya untuk menginstal di luar lingkungan virtual, di direktori skrip python pengguna (di Windows, saat inic:\users\<username>\appdata\roaming\python\python37\scripts
untuk saya dengan Python 3.7).Namun, Anda tidak akan dapat mengakses instalasi sistem atau pengguna dari dalam lingkungan virtual (bahkan jika Anda menggunakannya
--user
saat berada di lingkungan virtual).Jika Anda menginstal lingkungan virtual dengan
--system-site-packages
argumen, Anda akan memiliki akses ke folder skrip sistem untuk python. Saya percaya ini termasuk folder skrip python pengguna juga, tapi saya tidak yakin. Namun, mungkin ada konsekuensi yang tidak diinginkan untuk ini dan itu bukan cara yang dimaksudkan untuk menggunakan lingkungan virtual.Lokasi Sistem Python dan Folder Instal Pengguna Lokal
Anda dapat menemukan lokasi folder instal pengguna untuk python
python -m site --user-base
. Saya menemukan informasi yang saling bertentangan dalam Tanya Jawab, dokumentasi dan sebenarnya menggunakan perintah ini pada PC saya tentang apa defaultnya, tetapi mereka berada di bawah direktori home pengguna (~
pintasan di * nix, danc:\users\<username>
biasanya untuk Windows).Detail lainnya
The
--user
pilihan adalah tidak berlaku untuk setiap perintah. Misalnyapip uninstall
akan menemukan dan menghapus paket di mana pun mereka diinstal (di folder pengguna, folder lingkungan virtual, dll.) Dan--user
opsi tidak valid.Hal-hal yang terinstal dengan
pip install --user
akan dipasang di lokasi lokal yang hanya akan terlihat oleh akun pengguna saat ini, dan tidak akan memerlukan akses root (pada * nix) atau akses administrator (pada Windows).The
--user
memodifikasi pilihan semuapip
perintah yang menerimanya untuk melihat / beroperasi pada pengguna menginstal folder, jadi jika Anda menggunakanpip list --user
itu akan hanya menunjukkan paket apa diinstal denganpip install --user
.sumber
pip install
tanpa--user
sepenuhnya. Ini akan menginstal paket Python di tempat-tempat yang benar-benar harus diserahkan kepada manajer paket sistem (misalnyaapt
di Debian / Ubuntu). Lebih baik tidak main-main dengan ini, ini menyebabkan banyak masalah. Jika paket Python perlu tersedia untuk semua pengguna, maka gunakan manajer paket sistem operasi, tetapi jangan lakukansudo pip install ...
. Alternatifnya adalahsudo pip install --target ...
. Pada Windows, ini bukan masalah.~/.local/bin directory
secara teoritis diharapkan berada di blog Anda$PATH
.Menurut orang-orang ini adalah bug yang tidak menambahkannya
$PATH
saat menggunakansystemd
.Jawaban ini menjelaskannya lebih luas.
Tapi bahkan jika distro Anda termasuk yang
~/.local/bin
direktori ke$PATH
, mungkin dalam bentuk berikut (dalam~/.profile
):yang mengharuskan Anda untuk keluar dan masuk lagi , jika direktori itu tidak ada sebelumnya.
sumber