Menginstal paket pip ke folder $ HOME

330

Apa itu mungkin? Saat menginstal pip, instal paket python di dalam $HOMEfolder saya . (misalnya, saya ingin menginstal mercurial, menggunakan pip, tetapi di dalam $HOMEalih-alih /usr/local)

Saya menggunakan mesin mac dan hanya memikirkan kemungkinan ini, alih-alih "mencemari" saya /usr/local, saya akan menggunakan saya $HOME.

PEP370 persis tentang ini. Apakah hanya membuat ˜/.localdan melakukan pip install packagecukup untuk membuat paket-paket ini diinstal hanya pada folder $ HOME saya?

Seseorang masih menggunakan Anda MS-DOS
sumber
Sudahkah Anda memeriksa virtualenv? Anda dapat menginstal paket dengan pip di lingkungan yang terisolasi.
joet3ch
2
Saya memikirkannya, tetapi saya ingin menginstal beberapa aplikasi python menggunakan python yang ada (2.6.1), tetapi daripada menginstal di / usr / local /, instal di folder $ HOME saya dan tambahkan ke $ PATH. Saya ingin tahu apakah itu mungkin, dan ada peringatan dari pendekatan ini.
Seseorang masih menggunakan Anda MS-DOS
11
+1 untuk mempromosikan PEP370. Ini adalah pilihan sederhana namun bermanfaat yang harus diketahui lebih banyak orang.
Ned Deily
Saya sedang berjuang dengan masalah yang sama (mungkin disebabkan oleh salah konfigurasi pip dan easy_install untuk dua pyhtons yang berbeda). Sebagai upaya terakhir, saya mencoba menggunakan dataran $ python setup.py --user install. Dan itu berhasil. Paket sekarang diinstal di home subdir dan semua berfungsi seperti yang diharapkan. Harus berbicara dengan admin server saya.
Jan Vlcinsky
1
Jika Anda perlu menginstal PIP, lakukan saja hal seperti wget https://bootstrap.pypa.io/get-pip.pydiikuti oleh python get-pip.pydan Anda siap melakukannya. Mungkin bermanfaat jika Anda menggunakan mesin yang PIP yang dipasangnya terlalu lama (seperti kasus saya). Lihat pip.readthedocs.org/en/latest/installing.html untuk info lebih lanjut.
Markus

Jawaban:

463

Meskipun Anda dapat menggunakan virtualenv, Anda tidak perlu melakukannya. Caranya adalah meneruskan --userargumen PEP370 ke setup.pyskrip. Dengan versi terbaru pip, satu cara untuk melakukannya adalah:

pip install --user mercurial

Ini akan menghasilkan hgskrip yang diinstal $HOME/.local/bin/hgdan sisa paket hg di $HOME/.local/lib/pythonx.y/site-packages/.

Perhatikan, bahwa di atas berlaku untuk Python 2.6. Ada sedikit kontroversi di antara pengembang inti Python tentang apa lokasi direktori yang sesuai pada Mac OS X untuk userinstalasi bergaya PEP370 . Dalam Python 2.7 dan 3.2, lokasi di Mac OS X diubah dari $HOME/.localmenjadi $HOME/Library/Python. Ini mungkin berubah dalam rilis mendatang. Tetapi, untuk saat ini, pada 2.7 (dan 3.2, jika hgdidukung pada Python 3), lokasi di atas akan $HOME/Library/Python/x.y/bin/hgdan $HOME/Library/Python/x.y/lib/python/site-packages.

Ned Deily
sumber
Poin yang bagus. Sayangnya, ada bug di Python 2.7 yang menyebabkan PYTHONUSERBASE diabaikan untuk membangun kerangka OS X. Ini akan diperbaiki untuk Python 2.7.3.
Ned Deily
1
Ini terlihat sangat menarik. easy_installdatang diinstal di Mac OS X secara default, jadi saya hanya akan menginstal pip di luar $HOMEfolder.
Seseorang masih menggunakan Anda MS-DOS
1
Saya telah mencoba mengubah PYTHONUSERBASE ke lokasi lain. Tidak berhasil Bagaimana ini dilakukan pada Windows secara khusus?
Snerd
2
Berhati-hatilah, bahwa jika Anda melakukan ini dan kemudian mencoba menggunakan lingkungan conda file yang diinstal .localakan selalu terkena terlebih dahulu yang dapat menyebabkan sangat sulit untuk melacak kesalahan impor.
tacaswell
12
Perhatikan bahwa pada OSX, folder nampan direktori situs pengguna tidak pada PATH. Ini berarti skrip yang diinstal oleh paket dalam direktori situs pengguna tidak akan dapat dieksekusi kecuali Anda export PATH=$PATH:~/Library/Python/X.Y/bin/.
André Caron
21

Saya akan menggunakan virtualenv di direktori HOME Anda.

$ sudo easy_install -U virtualenv
$ cd ~
$ virtualenv .
$ bin/pip ...

Anda kemudian dapat mengubah ~/.(login|profile|bash_profile), mana yang tepat untuk shell Anda untuk menambahkan ~ / bin ke PATH Anda dan kemudian itu pip|python|easy_installakan menjadi yang digunakan secara default.

Ross Patterson
sumber
9
The "de facto" cara untuk melakukan ini adalah virtualenv venv, source venv/bin/activate. Anda mungkin tidak selalu ingin selalu menggunakan virtualenv Anda, dan dengan menggunakan metode ini, prompt Anda diawali dengan (venv)saat Anda menggunakannya.
nyuszika7h
2
@ nyuszika7h Kami tahu cara menggunakan virtualenv. Tetapi ini benar-benar menjawab pertanyaan dan merupakan solusi yang sangat rapi.
itsafire
8
@itsafire Siapa "kita"? Saya sarankan Anda untuk membaca en.wikipedia.org/wiki/Weasel_word
nyuszika7h
3
Bagaimanapun, saya tidak setuju, ini bukan "solusi yang rapi". Ini adalah hack yang sia-sia.
nyuszika7h
19

Anda dapat menentukan -topsi ( --target) untuk menentukan direktori tujuan. Lihat pip install --helpuntuk informasi terperinci. Ini adalah perintah yang Anda butuhkan:

pip install -t path_to_your_home package-name

misalnya, untuk menginstal say mxnet, di $HOMEdirektori saya , saya ketik:

pip install -t /home/foivos/ mxnet
Foivos
sumber
Mendapat kesalahan distutils.errors.DistutilsOptionError: can't combine user with prefix, exec_prefix/home, or install_(plat)base. Apa artinya?
Anthony Kong
Periksa github.com/pypa/pip/issues/3826 untuk diskusi terkait. Saya tidak tahu apa-apa lagi tentang ini, tetapi saya tidak pernah menemui masalah di lingkungan saya.
Foivos