Menggunakan pip3
untuk menginstal paket virtualenv
menyebabkan 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 $PATH
variabel di .bash_profile
; menambahkan baris berikut:
export PATH=/usr/local/bin:$PATH
Menjalankan which python3
kembali /usr/local/bin/python3
(setelah memulai ulang shell).
Catatan: which python3
masih mengembalikan / usr/bin/python
meskipun.
Dipasang virtualenv
menggunakan pip3
:
pip3 install virtualenv
Selanjutnya, buat yang baru virtualenv
dan 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 pip
dan which pip3
mengembalikan 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 list
kembali:
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.
sumber
pip3
?). Ini mungkin tidak buruk dengan sendirinya tetapi Anda harus waspada jika itu buruk.Jawaban:
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/pip
danbin/activate
skrip. Masukbin/pip
, lihat shebang tersebut. Apakah itu benar? Jika tidak, perbaiki. Kemudian on line ~42
di Andabin/activate
, periksa untuk melihat apakah jalur virtualenv Anda benar. Ini akan terlihat seperti iniJika 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 pip
berulang kali, mengikuti pelacakan tumpukan, dll.Pastikan itu benar-benar
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,
Mungkin tidak ideal, tetapi harus berhasil dalam keadaan darurat.
Tautan ke pertanyaan asli saya:
VirtualEnv / Pip mencoba menginstal paket secara global
sumber
#!/usr/local/bin/python3.3
bukannya#!/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.activate
naskah baik-baik saja, tapi berhati-hatilah , semua yangpip*
script daneasy_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
--relocatable
env saya, dan baris 42 salah, Sepertinya--relocatable
tidak melakukannya dengan benar.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
add2virtualenv
itu, tidak menambahkan jalur proyek saya ke $ PYTHONPATH saya karena alasan tertentu dalam virtualenv.Hanya beberapa jalan bercabang bagi mereka yang mungkin masih terjebak! Bersulang!
sumber
Saya memiliki masalah yang sama, saya menyelesaikannya dengan menghapus direktori venv dan membuatnya kembali!
Sekarang semuanya bekerja seperti pesona.
sumber
pip3
sementara virtualenv, secara default, python2 digunakan sehingga menggunakanpip
bukanpip3
. Saya memeriksabin
untuk menemukan nopip3
. Menggunakanvirtualenv -p python3 venv
memecahkan masalah.Saya punya masalah ini juga. Memanggil
pip install <package_name>
dari/bin
direktori 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 berisipip
. Aneh. Ini tidak terjadi di CentOS. Bagi saya, solusinya adalah menelepon,pip3
bukanpip
. Ketika saya telah terinstal pip dalam lingkungan virtual melalui ez_setup , tiga "pip" executable telah dipasang di/bin
direktori -pip
,pip3
, danpip3.3
. Anehnya, ketiga file itu persis sama. Panggilanpip3 install <package_name>
menyebabkan paket Python dipasang dengan benar ke direktori paket situs lokal. Memanggilpip
dengan nama jalur lengkap ke lingkungan virtual juga berfungsi dengan benar. Saya tertarik untuk mengetahui mengapa Mac saya tidak menggunakan $ PATH seperti yang saya harapkan.sumber
Hal pertama yang harus diperiksa adalah pip lokasi mana yang menyelesaikan ke:
jika Anda berada di virtualenv, Anda akan mengharapkan ini memberi Anda sesuatu seperti:
Namun mungkin kasusnya menyelesaikan pip sistem Anda karena beberapa alasan. Misalnya Anda dapat melihat ini dari dalam virtualenv Anda (ini buruk):
Untuk mengatasi ini, periksa pipconfig Anda di:
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)
sumber
/etc/pip.conf
! Saya memiliki masalah serupa dan setelah banyak debugging menemukan seseorang salah konfigurasi sistem yang saya kerjakan dengan mengotak-atik file ini.which pip
masih memberi saya jalur yang benar!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:
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"
sumber
Saya menemukan masalah yang sama dalam menjalankan Manjaro. Saya membuat lingkungan virtual menggunakan
python3 -m ven venv
dan kemudian mengaktifkan menggunakansource venv/bin/actiave
.which python
danwhich pip
keduanya 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 dengansudo 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.sumber
python-pip
melalui pamac dan pip virtualenv terus berfungsi dengan benar. Tidak yakin persis apa yang terjadi, tapi saya setuju dengan penilaian Anda tentang masalah pemasangan ganda.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.sumber
[install]\nprefix=
Buka direktori bin di lingkungan virtual Anda dan tulis seperti ini:
sumber
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
.Menghapus alias dan membuat ulang virtual env menggunakan
python3 -m venv venv
memperbaiki masalah.sumber
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 dengansudo virtualenv nameOfVEnv
. Kemudian setelah mengaktifkan virtualenv baru tersebutpip
perintah berfungsi seperti yang diharapkan.Saya tidak berpikir saya menggunakan
sudo
pada pembuatan virtualenv pertama dan itu mungkin alasan untuk tidak memiliki akses kepip
dari dalam virtualenv, saya bisa mendapatkan akses kepip2
sebelum perbaikan ini meskipun itu aneh.sumber
virtualenv
dijalankan lagiBerikut beberapa praktik yang dapat menghindari sakit kepala saat menggunakan Lingkungan Virtual:
Untuk representasi yang lebih baik dari praktik ini, berikut adalah simulasinya:
membuat folder untuk proyek / lingkungan Anda
menciptakan lingkungan
mengaktifkan lingkungan
menginstal paket
paket tersedia di dalam lingkungan
nonaktifkan lingkungan
paket TIDAK TERSEDIA di luar lingkungan
Catatan:
Kenapa tidak sudo?
Jika Anda mengganti nama folder proyek Anda (seperti yang disebutkan dalam jawaban yang diterima) ...
sumber
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.
sumber
Masalah ini terjadi saat membuat contoh virtualenv dan kemudian mengubah nama folder induk.
sumber
Tidak ada solusi di atas yang berhasil untuk saya.
Venv saya aktif.
pip -V
danwhich pip
memberi saya jalur virtualenv yang benar, tetapi ketikapip install
paket saya -ed dengan venv yang diaktifkan, mypip freeze
tetap kosong.Semua variabel lingkungan juga benar.
Akhirnya, saya baru saja mengubah pip dan menghapus virtualenv:
Instal ulang venv:
Buat venv:
Dan semua paket terinstal dengan benar ke venv saya lagi.
sumber
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
sumber
Saya punya masalah ini juga. Memanggil
sudo pip install
menyebabkan paket Python diinstal di direktori paket situs global dan panggilanpip install
berfungsi dengan baik. Jadi tidak ada gunanya sudo di virtualenv.sumber
sudo su
diikuti dengan<venv>/bin/activate
diikuti olehpip install
.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.
pyvenv
dengan--system-site-packages
./bin
tidak mengandungpip
,pip
tersedia dari paket situs sistempyvenv
tanpa--system-site-packages
pip
dipasang ke./bin
, tetapi ini versi yang berbeda (dariensurepip
)Solusi yang jelas untuk
pyvenv
dengan--system-site-packages
:--system-site-packages
opsiinclude-system-site-packages = false
ketrue
dalampyvenv.cfg
filesumber
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.
sumber
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.
sumber
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.
Oh sial, saya lupa untuk melakukan cd
projects
sebelum membuat virtualenv dan mengkloning rep. Baiklah, saya terlalu malas untuk menghancurkan dan menciptakan kembali. Saya hanya akan memindahkan dir tanpa masalah.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.
sumber
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_profile
yang seharusnya sudah disiapkan untuk mengembalikan Anda ke status pyenv / pyenv-virtualenv asli Anda.sumber
Itu terjadi pada saya ketika saya menginstal virtualenv dengan
--python=python3.6
flag tetapi kemudian mencoba menggunakannyapip2 install
.Membuat virtualenv dengan bendera versi yang akan Anda gunakan memecahkan masalah izin. Untuk memeriksa, coba
which pip
atauwhich pip2
atauwhich pip3
(tergantung pada pilihan Anda). Jika ada yangpip
Anda gunakan menunjukkan jalan tidak kevenv
sini adalah masalah Anda.sumber
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
sumber
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
sudo
untuk membuat salah satu folder di mana lingkungan virtual ada, dan sudo memberikan hak istimewa untuk melakukan rootSaya sangat kesal! Tapi itu berhasil!
sumber
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.
sumber
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!
sumber
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.
sumber
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):
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
Selain itu, jika Anda menginstal menggunakan conda, Anda dapat menginstal tanpa mengaktifkan:
sumber
JENDELA
Bagi saya solusi bukan untuk digunakan
mkvirtualenv
, tetapi:python -m venv path/to/your/virtualenv
workon bekerja dengan benar.
sementara di virtualenv:
pip -V
menunjukkan jalur virtualenv ke pipsumber