pip menginstal dalam paket situs global, bukan virtualenv

98

Menggunakan pip3untuk menginstal paket virtualenvmenyebabkan paket diinstal di folder paket situs global, bukan yang ada di folder virtualenv. Inilah cara saya mengatur Python3 dan virtualenv di OS X Mavericks (10.9.1):

Saya menginstal Python3 menggunakan Homebrew:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
brew install python3 --with-brewed-openssl

Mengubah $PATHvariabel di .bash_profile; menambahkan baris berikut:

export PATH=/usr/local/bin:$PATH

Menjalankan which python3kembali /usr/local/bin/python3(setelah memulai ulang shell).

Catatan: which python3masih mengembalikan / usr/bin/pythonmeskipun.

Dipasang virtualenvmenggunakan pip3:

pip3 install virtualenv

Selanjutnya, buat yang baru virtualenvdan aktifkan:

virtualenv testpy3 -p python3
cd testpy3
source bin/activate

Catatan: jika saya tidak menentukan -p python3, pip akan hilang dari folder bin di virtualenv.

Menjalankan which pipdan which pip3mengembalikan folder virtualenv:

/Users/kristof/VirtualEnvs/testpy3/bin/pip3

Sekarang, ketika saya mencoba untuk menginstal misalnya penurunan harga menggunakan pip di virtualenv yang diaktifkan, pip akan menginstal di folder paket situs global, bukan di folder paket situs dari virtualenv.

pip install markdown

Menjalankan pip listkembali:

Markdown (2.3.1)
pip (1.4.1)
setuptools (2.0.1)
virtualenv (1.11)

Isi dari /Users/kristof/VirtualEnvs/testpy3/lib/python3.3/site-packages:

__pycache__/
_markerlib/
easy_install.py
pip/
pip-1.5.dist-info/
pkg_resources.py
setuptools/
setuptools-2.0.2.dist-info/

Isi dari /usr/local/lib/python3.3/site-packages:

Markdown-2.3.1-py3.3.egg-info/
__pycache__/
easy-install.pth
markdown/
pip-1.4.1-py3.3.egg/
setuptools-2.0.1-py3.3.egg
setuptools.pth
virtualenv-1.11-py3.3.egg-info/
virtualenv.py
virtualenv_support/

Seperti yang Anda lihat, folder paket situs global berisi penurunan harga, sedangkan folder virtualenv tidak.

Catatan: Saya telah menginstal Python2 dan Python3 pada VM yang berbeda (mengikuti instruksi ini ) dan memiliki masalah yang sama dengan Python3; menginstal paket dalam virtualenv berbasis Python2 bekerja dengan sempurna.

Setiap tip, petunjuk,… akan sangat dihargai.

ƘɌỈSƬƠƑ
sumber
pip tidak menginstal paket jika sudah tersedia. Anda akan melihat "Persyaratan sudah terpenuhi" dalam keluarannya. Coba instal paket yang belum Anda miliki. btw, pip3 mungkin menggunakan non-brew python3 (bagaimana cara menginstalnya pip3?). Ini mungkin tidak buruk dengan sendirinya tetapi Anda harus waspada jika itu buruk.
jfs
1
Saya tidak menginstal penurunan harga sebelumnya. Daftar paket global kosong. Tidak peduli paket apa yang saya coba, saya dapat mereproduksi perilaku ini setiap saat.
ƘɌỈSƬƠƑ
Mengenai pip3: ini dipasang oleh homebrew, bersama dengan Python3.
ƘɌỈSƬƠƑ
Bagi saya ini juga membantu: stackoverflow.com/questions/14695278/… Hanya untuk FYI kepada orang lain
Nagaraj Tantri

Jawaban:

92

Lucu Anda mengungkit hal ini, saya baru saja mengalami masalah yang persis sama. Saya akhirnya menyelesaikannya, tetapi saya masih tidak yakin apa yang menyebabkannya.

Coba periksa Anda bin/pipdan bin/activateskrip. Masuk bin/pip, lihat shebang tersebut. Apakah itu benar? Jika tidak, perbaiki. Kemudian on line ~ 42di Anda bin/activate, periksa untuk melihat apakah jalur virtualenv Anda benar. Ini akan terlihat seperti ini

VIRTUAL_ENV="/Users/me/path/to/virtual/environment"

Jika salah, perbaiki deactivate, lalu . bin/activate, dan jika masalah bersama kita memiliki penyebab yang sama, masalah itu akan berhasil. Jika masih tidak, Anda berada di jalur yang benar. Saya menjalani rutinitas pemecahan masalah yang sama seperti yang Anda lakukan, which pipberulang kali, mengikuti pelacakan tumpukan, dll.

Pastikan itu benar-benar

/Users/kristof/VirtualEnvs/testpy3/bin/pip3

adalah apa yang Anda inginkan, dan tidak mengacu pada proyek uji lain yang memiliki nama serupa (saya punya masalah itu, dan tidak tahu bagaimana itu dimulai. Kecurigaan saya menjalankan beberapa virtualenvs pada waktu yang sama).

Jika tidak ada yang berhasil, solusi sementara mungkin untuk, seperti yang dikatakan Joe Holloway,

Jalankan saja pip virtualenv dengan jalur lengkapnya (yaitu, jangan bergantung pada pencarian jalur yang dapat dieksekusi) dan Anda bahkan tidak perlu mengaktifkan lingkungan. Itu akan melakukan hal yang benar.

Mungkin tidak ideal, tetapi harus berhasil dalam keadaan darurat.

Tautan ke pertanyaan asli saya:

VirtualEnv / Pip mencoba menginstal paket secara global

Chase Ries
sumber
1
Terima kasih Chase. Saya datang dengan pertanyaan Anda sebelum memposting pertanyaan saya, tetapi sepertinya saya melewatkan baris terakhir yang menyebutkan shebang. Dan memang, itu diatur ke #!/usr/local/bin/python3.3bukannya #!/Users/kristof/VirtualEnvs/testpy3/bin/python3.3. Saya mengubahnya, mengaktifkan virtualenv dan menginstal paket penurunan harga. Pip sekarang menginstal di folder paket situs virtualenv, bukan di folder global.
ƘɌỈSƬƠƑ
Saya mengalami ini juga, terima kasih banyak atas jawabannya. Saya melihat shebang dan kemudian segera setelah itu menemukan pertanyaan ini, membenarkan kecurigaan saya. Adakah yang tahu mengapa shebang itu salah? Alangkah baiknya menemukan perbaikan permanen sehingga kami tidak perlu memeriksanya setiap kali kami membuat lingkungan virtual baru.
Akankah
2
Saya memiliki masalah yang sama. Saya activatenaskah baik-baik saja, tapi berhati-hatilah , semua yang pip*script dan easy_install*script memiliki shebang yang salah. Semuanya harus diperbaiki secara manual. Saya tidak dapat memperbaikinya melalui menginstal ulang pip atau semacamnya. Juga, klarifikasi untuk solusi Joe Holloway: masalahnya bukan pada shell yang mencari pip, melainkan fakta bahwa pip secara eksplisit menentukan python yang salah . Oleh karena itu, Anda perlu menentukan sendiri python, seperti ini:$ ~/.virtualenvs/venv/bin/python ~/.virtualenvs/venv/bin/pip --version
Neil Traft
Saya menemui masalah ini setelah --relocatableenv saya, dan baris 42 salah, Sepertinya --relocatabletidak melakukannya dengan benar.
shellbye
4
Ini terjadi pada saya ketika saya mengganti nama direktori perantara, jadi saya harus mengedit skrip aktif dan pip di '/ bin'
joarleymoraes
16

Bagi saya ini bukan masalah pip atau virtualenv. Itu masalah python. Saya telah mengatur $ PYTHONPATH saya secara manual di ~ / .bash_profile (atau ~ / .bashrc) setelah mengikuti beberapa tutorial online. Set $ ​​PYTHONPATH secara manual ini tersedia di virtualenv karena mungkin seharusnya diizinkan.

Selain add2virtualenvitu, tidak menambahkan jalur proyek saya ke $ PYTHONPATH saya karena alasan tertentu dalam virtualenv.

Hanya beberapa jalan bercabang bagi mereka yang mungkin masih terjebak! Bersulang!

e.thompsy
sumber
11

Saya memiliki masalah yang sama, saya menyelesaikannya dengan menghapus direktori venv dan membuatnya kembali!

deactivate (if venv is activated first deactivate it)
rm -rf venv
virtualenv -p python3 venv
. ENV/bin/activate
pip3 install -r requirements.txt

Sekarang semuanya bekerja seperti pesona.

Alireza A. Ahmadi
sumber
Saya menggunakan pip3sementara virtualenv, secara default, python2 digunakan sehingga menggunakan pipbukan pip3. Saya memeriksa binuntuk menemukan no pip3. Menggunakan virtualenv -p python3 venvmemecahkan masalah.
subtleseeker
Ini memecahkan masalah saya. Pembuatan virtualenv otomatis Pycharm tidak berfungsi dengan benar. Instalasi manual berhasil. Terima kasih.
Loaderon
5

Saya punya masalah ini juga. Memanggil pip install <package_name>dari /bindirektori dalam lingkungan virtual Python 3.3 saya di Mavericks Mac menyebabkan paket Python dipasang di direktori paket situs global Python 2.7. Ini terlepas dari kenyataan bahwa $ PATH saya dimulai dengan direktori yang berisi pip. Aneh. Ini tidak terjadi di CentOS. Bagi saya, solusinya adalah menelepon, pip3bukan pip. Ketika saya telah terinstal pip dalam lingkungan virtual melalui ez_setup , tiga "pip" executable telah dipasang di /bindirektori - pip, pip3, dan pip3.3. Anehnya, ketiga file itu persis sama. Panggilanpip3 install <package_name>menyebabkan paket Python dipasang dengan benar ke direktori paket situs lokal. Memanggil pipdengan nama jalur lengkap ke lingkungan virtual juga berfungsi dengan benar. Saya tertarik untuk mengetahui mengapa Mac saya tidak menggunakan $ PATH seperti yang saya harapkan.

kme757
sumber
5

Hal pertama yang harus diperiksa adalah pip lokasi mana yang menyelesaikan ke:

which pip

jika Anda berada di virtualenv, Anda akan mengharapkan ini memberi Anda sesuatu seperti:

/path/to/virtualenv/.name_of_virtualenv/bin/pip

Namun mungkin kasusnya menyelesaikan pip sistem Anda karena beberapa alasan. Misalnya Anda dapat melihat ini dari dalam virtualenv Anda (ini buruk):

/ usr / local / bin / pip (atau apapun yang tidak ada di jalur virtualenv Anda).

Untuk mengatasi ini, periksa pipconfig Anda di:

~/.pipconf
~/.conf/pip
/etc/pip.conf

dan pastikan tidak ada yang memaksa jalur Python Anda atau jalur pip Anda (ini memperbaikinya untuk saya).

Kemudian coba mulai terminal baru dan bangun kembali virtualenv Anda (hapus lalu buat lagi)

Sami Mulai
sumber
2
Periksa juga /etc/pip.conf! Saya memiliki masalah serupa dan setelah banyak debugging menemukan seseorang salah konfigurasi sistem yang saya kerjakan dengan mengotak-atik file ini.
t. Hewan
Saya menggunakan arch Linux. Saya pikir /etc/pip.conf sudah diatur oleh OS.
Q. Qiao
Terima kasih! Anda menyelamatkan hari saya! Konfigurasi tersebut seperti hantu yang tersembunyi di sistem file
MewX
2
Saya memiliki alias yang ditentukan sesi terminal yang mengganti pip, karena beberapa alasan which pipmasih memberi saya jalur yang benar!
Matteo
4

Saya mengalami masalah yang sama saat menginstal paket python dari dalam virtualenv. Akar masalah dalam kasus saya berbeda. Dari dalam virtualenv, saya (dari kebiasaan di Ubuntu), melakukan:

sudo easy_install -Z <package>

Hal ini menyebabkan bin / pip shebang diabaikan dan menggunakan python non virtualenv root untuk menginstalnya di paket situs global. Karena kami memiliki lingkungan virtual, kami harus menginstal paket tanpa "sudo"

Alok Wadhwa
sumber
4

Saya menemukan masalah yang sama dalam menjalankan Manjaro. Saya membuat lingkungan virtual menggunakan python3 -m ven venvdan kemudian mengaktifkan menggunakan source venv/bin/actiave. which pythondan which pipkeduanya menunjuk ke binari yang benar di virtualenv, namun saya tidak dapat menginstal ke virtualenv, bahkan ketika menggunakan path lengkap dari binari. Ternyata ketika saya menghapus paket python-pip dengan sudo pacman -R python-pip python-reportlab(harus menyertakan reportlab untuk memenuhi dependensi) semuanya mulai berfungsi seperti yang diharapkan. Tidak yakin mengapa, tetapi ini mungkin karena pemasangan ganda di mana paket sistem diutamakan.

helgis
sumber
Saya juga mengalami masalah ini di Manjaro, dan menyelesaikannya dengan cara yang sama. Setelah menyelesaikan, saya menginstal ulang python-pipmelalui pamac dan pip virtualenv terus berfungsi dengan benar. Tidak yakin persis apa yang terjadi, tapi saya setuju dengan penilaian Anda tentang masalah pemasangan ganda.
sid
3

Saya mengalami masalah serupa setelah memperbarui ke pip==8.0.0. Harus menggunakan debugging pip untuk melacak jalur yang buruk.

Ternyata direktori profil saya memiliki file konfigurasi distutils dengan beberapa nilai jalur kosong. Ini menyebabkan semua paket diinstal ke direktori root yang sama, bukan ke lingkungan virtual yang sesuai (dalam kasus saya /lib/site-packages).

Saya tidak yakin bagaimana file konfigurasi sampai di sana atau bagaimana file itu memiliki nilai kosong tetapi dimulai setelah memperbarui pip.

Jika ada orang lain yang tersandung pada masalah yang sama ini, cukup menghapus file ~/.pydistutils.cfg(atau menghapus jalur konfigurasi kosong) memperbaiki masalah di lingkungan saya karena pip kembali ke konfigurasi terdistribusi default.

Josiah Ruddell
sumber
1
Ini masalah saya juga. File saya terlihat seperti ini, tidak tahu bagaimana file itu sampai di sana:[install]\nprefix=
foslock
1
@foslock ya, seperti itulah rupa milikku juga. kabar buruk haha!
Josiah Ruddell
3

Buka direktori bin di lingkungan virtual Anda dan tulis seperti ini:

./pip3 install <package-name>
Taohidul Islam
sumber
3

Saya memiliki masalah yang sama di macos dengan python 2 dan 3 diinstal.

Juga, saya memiliki alias untuk menunjuk ke python3 dan pip3 di file .bash_profile.

alias python=/usr/local/bin/python3
alias pip=/usr/local/bin/pip3

Menghapus alias dan membuat ulang virtual env menggunakan python3 -m venv venvmemperbaiki masalah.

Mirceac21
sumber
instalasi macos python tidak perlu menyakitkan imho
iomv
Saya menarik rambut saya keluar, dan inilah yang akhirnya memperbaiki hal-hal untuk saya: "pip yang mana" mengungkapkan masalah, "unalias pip" memperbaikinya.
Colin
1

Menemukan masalah yang sama hari ini. Saya hanya menginstal ulang pip secara global dengan sudo easy_install pip(OSX / Max), lalu membuat virtualenv saya lagi dengan sudo virtualenv nameOfVEnv. Kemudian setelah mengaktifkan virtualenv baru tersebutpip perintah berfungsi seperti yang diharapkan.

Saya tidak berpikir saya menggunakan sudopada pembuatan virtualenv pertama dan itu mungkin alasan untuk tidak memiliki akses ke pipdari dalam virtualenv, saya bisa mendapatkan akses ke pip2sebelum perbaikan ini meskipun itu aneh.

Erion S.
sumber
Saya mendapatkan ini karena saya memindahkan direktori ke jalur lain dan itu perlu virtualenvdijalankan lagi
citynorman
1

Berikut beberapa praktik yang dapat menghindari sakit kepala saat menggunakan Lingkungan Virtual:

  • Buat folder untuk proyek Anda.
  • Buat proyek Virtualenv Anda di dalam folder ini.
  • Setelah mengaktifkan lingkungan proyek Anda, jangan pernah menggunakan " sudo pip install package ".
  • Setelah menyelesaikan pekerjaan Anda, selalu " nonaktifkan " lingkungan Anda.
  • Hindari mengganti nama folder proyek Anda.


Untuk representasi yang lebih baik dari praktik ini, berikut adalah simulasinya:


membuat folder untuk proyek / lingkungan Anda

$ mkdir venv

menciptakan lingkungan

$ cd venv/ 

$ virtualenv google_drive
New python executable in google_drive/bin/python
Installing setuptools, pip...done.

mengaktifkan lingkungan

$ source google_drive/bin/activate

menginstal paket

(google_drive) $ pip install PyDrive
Downloading/unpacking PyDrive
Downloading PyDrive-1.3.1-py2-none-any.whl
...
...
...    
Successfully installed PyDrive PyYAML google-api-python-client oauth2client six uritemplate httplib2 pyasn1 rsa pyasn1-modules
Cleaning up...

paket tersedia di dalam lingkungan

(google_drive) $ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
>>>  
>>> gdrive = pydrive.auth.GoogleAuth()
>>>

nonaktifkan lingkungan

(google_drive) $ deactivate 

$ 

paket TIDAK TERSEDIA di luar lingkungan

(google_drive) $ python
Python 2.7.6 (default, Oct 26 2016, 20:32:10) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pydrive.auth
>>> 

Catatan:

Kenapa tidak sudo?

Virtualenv menciptakan lingkungan baru untuk Anda, mendefinisikan $ PATH dan beberapa variabel dan pengaturan lainnya. Saat Anda menggunakan sudo pip install package , Anda menjalankan Virtualenv sebagai root , keluar dari seluruh lingkungan yang dibuat, dan kemudian, menginstal paket pada paket situs global, dan tidak di dalam folder proyek tempat Anda memiliki Lingkungan Virtual, meskipun Anda telah mengaktifkan lingkungan.

Jika Anda mengganti nama folder proyek Anda (seperti yang disebutkan dalam jawaban yang diterima) ...

... Anda harus menyesuaikan beberapa variabel dari beberapa file di dalam direktori bin proyek Anda.

Sebagai contoh:

bin / pip, baris 1 (She Bang)

bin / aktifkan, baris 42 (VIRTUAL_ENV)

ivanleoncz.dll
sumber
1

Saya punya masalah ini. Ternyata ada spasi di salah satu nama folder saya yang menyebabkan masalah. Saya menghapus ruang, menghapus dan memulihkan menggunakan venv, dan semuanya baik-baik saja.

normonik
sumber
1

Masalah ini terjadi saat membuat contoh virtualenv dan kemudian mengubah nama folder induk.

Giordhano
sumber
1

Tidak ada solusi di atas yang berhasil untuk saya.

Venv saya aktif. pip -Vdan which pipmemberi saya jalur virtualenv yang benar, tetapi ketika pip installpaket saya -ed dengan venv yang diaktifkan, mypip freeze tetap kosong.

Semua variabel lingkungan juga benar.

Akhirnya, saya baru saja mengubah pip dan menghapus virtualenv:

easy_install pip==7.0.2

pip install pip==10

sudo pip uninstall virtualenv

Instal ulang venv:

sudo pip install virtualenv

Buat venv:

python -m virtualenv venv_name_here

Dan semua paket terinstal dengan benar ke venv saya lagi.

jturi
sumber
1

Setelah membuat lingkungan virtual, coba gunakan pip yang terletak di yourVirtualEnvName \ Scripts

Itu harus menginstal paket di dalam Lib \ site-packages di lingkungan virtual Anda

Bogumil
sumber
0

Saya punya masalah ini juga. Memanggil sudo pip installmenyebabkan paket Python diinstal di direktori paket situs global dan panggilan pip installberfungsi dengan baik. Jadi tidak ada gunanya sudo di virtualenv.

Petru
sumber
Atau jika Anda menggunakan sudo, Anda juga harus mengaktifkan virtual environment-nya. sudo sudiikuti dengan <venv>/bin/activatediikuti oleh pip install.
Dave
0

Masalah yang sama. Python3.5 dan pip 8.0.2 diinstal dari Linux rpm.

Saya tidak menemukan penyebab utamanya dan tidak dapat memberikan jawaban yang tepat. Sepertinya ada beberapa kemungkinan penyebabnya.

Namun, saya harap saya dapat membantu membagikan pengamatan dan solusi saya.

  1. pyvenv dengan --system-site-packages

    • ./bintidak mengandung pip,pip tersedia dari paket situs sistem
    • paket diinstal secara global ( BUG? )
  2. pyvenv tanpa --system-site-packages

    • pipdipasang ke ./bin, tetapi ini versi yang berbeda (dari ensurepip)
    • paket diinstal dalam lingkungan virtual ( OK )

Solusi yang jelas untuk pyvenvdengan --system-site-packages:

  • buat tanpa --system-site-packagesopsi
  • ubah include-system-site-packages = falseke truedalam pyvenv.cfgfile
VPfB
sumber
0

Ini juga perlu diperiksa bahwa Anda tidak memodifikasi jalur ke virtualenv Anda.

Dalam hal ini, baris pertama masuk bin/pip (dan sisa file yang dapat dieksekusi) akan memiliki jalur yang salah.

Anda dapat mengedit file ini dan memperbaiki jalur atau menghapus dan menginstal virtualenv lagi.

Memo
sumber
0

Untuk Python 3ers

Coba perbarui. Saya memiliki masalah yang sama persis dan mencoba jawaban Chases, namun tidak berhasil. Cara tercepat untuk melakukan refaktorisasi ini adalah dengan memperbarui versi Python Minor / Patch Anda jika memungkinkan. Saya perhatikan bahwa saya menjalankan 3.5.1 dan memperbarui ke 3.5.2. Pyvenv sekali lagi bekerja.

roti isi daging
sumber
0

Ini terjadi pada saya ketika saya membuat virtualenv di lokasi yang salah. Saya kemudian berpikir saya bisa memindahkan arah ke lokasi lain tanpa itu penting. Itu penting.

mkdir ~/projects
virtualenv myenv
cd myenv
git clone [my repository]

Oh sial, saya lupa untuk melakukan cd projectssebelum membuat virtualenv dan mengkloning rep. Baiklah, saya terlalu malas untuk menghancurkan dan menciptakan kembali. Saya hanya akan memindahkan dir tanpa masalah.

cd ~
mv myenv projects
cd projects/myenv/myrepo
pip install -r requirements

Tidak, ingin lebih banyak izin, apa? Saya pikir itu aneh tapi SUDO AWAY! Itu kemudian menginstal paket ke lokasi global.

Pelajaran yang saya pelajari adalah, hapus saja direktori virtualenv. Jangan pindahkan.

teewuane
sumber
0

Mengalami masalah ini setelah menginstal Divio: itu telah mengubah PATH atau lingkungan saya dengan cara tertentu, saat meluncurkan terminal.

Solusi dalam kasus ini hanyalah melakukan source ~/.bash_profileyang seharusnya sudah disiapkan untuk mengembalikan Anda ke status pyenv / pyenv-virtualenv asli Anda.

davefelce
sumber
0

Itu terjadi pada saya ketika saya menginstal virtualenv dengan --python=python3.6flag tetapi kemudian mencoba menggunakannya pip2 install.
Membuat virtualenv dengan bendera versi yang akan Anda gunakan memecahkan masalah izin. Untuk memeriksa, coba which pipatau which pip2atau which pip3(tergantung pada pilihan Anda). Jika ada yang pipAnda gunakan menunjukkan jalan tidak ke venvsini adalah masalah Anda.

techkuz
sumber
0

Entah bagaimana, file setup.cfg dengan prefix = "" di folder proyek

menjalankan pip install pada virtualenv di luar folder proyek bekerja sehingga dari dalam perintah pip untuk menggunakan awalan kosong yang defaultnya adalah "/"

menghapus file memperbaikinya

Ami Mahloof
sumber
0

Saya mengalami masalah ini, dan setelah mencoba semua solusi di atas, saya baru saja menghapus semuanya dan mulai dari awal.

Dalam kasus saya sendiri, saya digunakan sudountuk membuat salah satu folder di mana lingkungan virtual ada, dan sudo memberikan hak istimewa untuk melakukan root

Saya sangat kesal! Tapi itu berhasil!

KingNonso
sumber
0

Saya harus menggunakan 'sudo' untuk menginstal paket melalui pip di sistem ubuntu saya karena beberapa alasan. Ini menyebabkan paket diinstal di paket situs global. Menempatkan ini di sini untuk siapa saja yang mungkin menghadapi masalah ini di masa mendatang.

sujithvemi
sumber
0

Saya memiliki masalah persis dari judul, dan saya menyelesaikannya. Pip mulai menginstal di venv site-packages setelah saya membersihkan PATH saya: ia memiliki jalur ke direktori ~ / bin lokal saya di awal.

Jadi, saran saya: periksa variabel lingkungan Anda secara menyeluruh untuk "sampah" atau hal-hal yang tidak standar. Sayangnya, virtualenv bisa sensitif terhadap itu.

Semoga berhasil!

Benkevitch
sumber
0

Jawaban singkatnya adalah jalankan Command virtualenv dengan parameter “—no-site-packages”.

Jawaban panjang dengan penjelasan: -

Jadi setelah berlari kesana kemari, dan melalui banyak utas saya menemukan diri saya masalahnya. Jawaban di atas telah memberikan ide tetapi saya ingin membahas semuanya lagi.

  • Masalahnya adalah bahkan jika Anda mengaktifkan lingkungan, itu mengacu pada lingkungan sistem karena cara kami mengemas virtualenv.

  • ketika kita menjalankan perintah virtualenv env -p python3 itu akan menginstal virtualenv tetapi tidak akan membuat no-global — site-packages.txt.

  • Karena itu ketika Anda mengaktifkan lingkungan dengan perintah aktifkan sumber di sana file ini disebut site.py (nama bisa berbeda, saya hanya lupa) yang berjalan dan memeriksa apakah file ini tidak ada itu tidak akan menambahkan jalur env Anda ke sys.path dan menggunakan sistem python.

  • untuk memperbaiki masalah ini cukup jalankan virtualenv dengan parameter ekstra —tidak ada-paket-situs itu akan membuat file itu dan ketika Anda mengaktifkan lingkungan itu akan menambahkan jalur lingkungan khusus Anda dalam variabel PATH Anda sehingga dapat diakses.

rushi47
sumber
0

Banyak diskusi bagus di atas, tetapi contoh virtualenv digunakan. Karena 'conda' sekarang menjadi alat yang direkomendasikan untuk mengelola virtualenv, saya telah merangkum langkah-langkah dalam menjalankan pip di conda env sebagai berikut.

Saya akan menggunakan py36r sebagai nama env, dan / opt / conda / envs adalah awalan dari envs):

$ source /opt/conda/etc/profile.d/conda.sh # skip if already done 
$ conda activate py36r
$ pip  install pkg_xyz
$ pip  list | grep pkg_xyz

Perhatikan bahwa pip yang dieksekusi harus dalam /opt/conda/envs/py36r/bin/pip(bukan /opt/conda/bin/pip).

Alternatifnya, Anda dapat menjalankan perintah berikut tanpa mengaktifkan conda

$ /opt/conda/envs/py36r/bin/pip

Selain itu, jika Anda menginstal menggunakan conda, Anda dapat menginstal tanpa mengaktifkan:

$ conda install -n py36r pkg_abc ...
HAltos
sumber
0

JENDELA

Bagi saya solusi bukan untuk digunakan mkvirtualenv, tetapi:

python -m venv path/to/your/virtualenv

workon bekerja dengan benar.

sementara di virtualenv: pip -Vmenunjukkan jalur virtualenv ke pip

Seyhak Ly
sumber