การติดตั้ง pip ในแพ็คเกจไซต์ทั่วโลกแทนที่จะเป็น Virtualenv


104

การใช้pip3เพื่อติดตั้งแพ็กเกจใน a virtualenvทำให้แพ็กเกจถูกติดตั้งในโฟลเดอร์ global site-packaging แทนที่จะเป็นแพ็กเกจในโฟลเดอร์ Virtualenv นี่คือวิธีการตั้งค่า Python3 และ Virtualenv บน OS X Mavericks (10.9.1):

ฉันติดตั้ง Python3 โดยใช้ Homebrew:

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

เปลี่ยน$PATHตัวแปรใน.bash_profile; เพิ่มบรรทัดต่อไปนี้:

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

การรันwhich python3ผลตอบแทน/usr/local/bin/python3(หลังจากรีสตาร์ทเชลล์)

หมายเหตุ: which python3ยังคงส่งคืน / usr/bin/pythonแม้ว่า

ติดตั้งvirtualenvโดยใช้pip3:

pip3 install virtualenv

จากนั้นสร้างใหม่virtualenvและเปิดใช้งาน:

virtualenv testpy3 -p python3
cd testpy3
source bin/activate

หมายเหตุ: ถ้าฉันไม่ระบุ -p python3 pip จะหายไปจากโฟลเดอร์ bin ใน Virtualenv

การรันwhich pipและwhich pip3ทั้งสองส่งคืนโฟลเดอร์ Virtualenv:

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

ตอนนี้เมื่อฉันพยายามติดตั้งเช่น Markdown โดยใช้ pip ใน Virtualenv ที่เปิดใช้งาน pip จะติดตั้งในโฟลเดอร์ global site-package แทนโฟลเดอร์ site-Packages ของ Virtualenv

pip install markdown

pip listผลตอบแทนการทำงาน:

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

เนื้อหาของ/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/

เนื้อหาของ/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/

อย่างที่คุณเห็นโฟลเดอร์global site-package มี Markdown โฟลเดอร์ Virtualenv ไม่มี

หมายเหตุ: ฉันเคยติดตั้ง Python2 และ Python3 มาก่อนบน VM อื่น (ทำตามคำแนะนำเหล่านี้ ) และมีปัญหาเดียวกันกับ Python3 การติดตั้งแพ็คเกจใน Virtualenv ที่ใช้ Python2 ทำงานได้อย่างไม่มีที่ติ

คำแนะนำคำแนะนำใด ๆ ... จะได้รับการชื่นชมมาก


pip ไม่ติดตั้งแพ็คเกจหากมีอยู่แล้ว คุณควรเห็น "ความต้องการเป็นที่พอใจแล้ว" ในผลลัพธ์ ลองติดตั้งแพ็คเกจที่คุณยังไม่มี btw, pip3 อาจใช้ python3 ที่ไม่ได้ชง (คุณจะติดตั้งpip3อย่างไร?) มันอาจจะไม่เลวร้ายด้วยตัวมันเอง แต่คุณควรตระหนักว่ามันเป็น
jfs

1
ฉันไม่ได้ติดตั้ง Markdown มาก่อน รายการแพ็คเกจส่วนกลางว่างเปล่า ไม่สำคัญว่าฉันจะลองใช้แพ็คเกจอะไรฉันสามารถสร้างพฤติกรรมนี้ซ้ำได้ทุกครั้ง
ƘɌỈSƬƠƑ

เกี่ยวกับ pip3: สิ่งนี้ถูกติดตั้งโดย homebrew พร้อมกับ Python3
ƘɌỈSƬƠƑ

สำหรับฉันสิ่งนี้ช่วยได้เช่นกัน: stackoverflow.com/questions/14695278/…เพียงเพื่อ FYI เพื่อคนอื่น
Nagaraj Tantri

คำตอบ:


97

ตลกดีที่คุณพูดเรื่องนี้ฉันเพิ่งมีปัญหาเดียวกัน ในที่สุดฉันก็แก้ไขได้ แต่ยังไม่แน่ใจว่าเกิดจากอะไร

ลองตรวจสอบbin/pipและbin/activateสคริปต์ของคุณ ในbin/pipรูปลักษณ์ที่ shebang ถูกต้องหรือไม่ ถ้าไม่ถูกต้องให้แก้ไข จากนั้นในบรรทัด ~ 42ในของคุณbin/activateตรวจสอบเพื่อดูว่าเส้นทาง Virtualenv ของคุณถูกต้องหรือไม่ มันจะเป็นแบบนี้

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

ถ้ามันผิดแก้ไขให้ถูกต้องdeactivateแล้ว. bin/activateและถ้าปัญหาร่วมกันของเรามีสาเหตุเดียวกันก็ควรจะทำงาน หากยังไม่เป็นเช่นนั้นแสดงว่าคุณมาถูกทางแล้ว ฉันทำตามขั้นตอนการแก้ปัญหาเดียวกันกับที่คุณทำwhich pipซ้ำแล้วซ้ำอีกตามการติดตามสแต็ก ฯลฯ

ตรวจสอบให้แน่ใจว่า

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

คือสิ่งที่คุณต้องการและไม่ได้อ้างถึงโครงการทดสอบอื่นที่มีชื่อคล้ายกัน (ฉันมีปัญหานั้นและไม่รู้ว่ามันเริ่มต้นอย่างไรความสงสัยของฉันกำลังเรียกใช้ Virtualenv หลายตัวในเวลาเดียวกัน)

หากวิธีนี้ไม่ได้ผลอาจเป็นวิธีแก้ปัญหาชั่วคราวดังที่โจฮอลโลเวย์กล่าวว่า

เพียงแค่เรียกใช้ pip ของ Virtualenv ด้วยพา ธ แบบเต็ม (เช่นอย่าพึ่งค้นหาพา ธ ที่เรียกใช้งานได้) และคุณไม่จำเป็นต้องเปิดใช้งานสภาพแวดล้อมด้วยซ้ำ มันจะทำในสิ่งที่ถูกต้อง

บางทีอาจจะไม่เหมาะ แต่ก็ควรจะใช้งานได้อย่างรวดเร็ว

ลิงก์ไปยังคำถามเดิมของฉัน:

VirtualEnv / Pip พยายามติดตั้งแพ็คเกจทั่วโลก


1
ขอบคุณ Chase ฉันมาตามคำถามของคุณก่อนที่จะโพสต์ของฉัน แต่ดูเหมือนว่าฉันจะข้ามบรรทัดสุดท้ายที่กล่าวถึงเชบัง และแน่นอนมันถูกกำหนดให้แทน#!/usr/local/bin/python3.3 #!/Users/kristof/VirtualEnvs/testpy3/bin/python3.3ฉันเปลี่ยนมันเปิดใช้งาน Virtualenv และติดตั้งแพ็คเกจ Markdown ตอนนี้ Pip ติดตั้งในโฟลเดอร์ไซต์แพ็คเกจ Virtualenv แทนที่จะเป็นโฟลเดอร์ส่วนกลาง
ƘɌỈSƬƠƑ

ฉันเจอเรื่องนี้เช่นกันขอบคุณมากสำหรับคำตอบ ฉันสังเกตเห็นผ้าคลุมไหล่และหลังจากนั้นก็พบคำถามนี้เพื่อยืนยันความสงสัยของฉัน ไม่มีใครรู้ว่าทำไม Shebang ถึงผิด? คงจะดีไม่น้อยหากพบการแก้ไขแบบถาวรดังนั้นเราจึงไม่ต้องตรวจสอบทุกครั้งที่สร้างสภาพแวดล้อมเสมือนใหม่
จะ

2
ผมมีปัญหาเดียวกัน. ฉันactivateสคริปต์ถูกปรับ แต่ระวัง , ทุกpip*สคริปต์และeasy_install*สคริปต์มี shebang ผิด พวกเขาทั้งหมดต้องได้รับการแก้ไขด้วยตนเอง ฉันไม่สามารถแก้ไขได้ด้วยการติดตั้ง pip ใหม่หรืออะไรทำนองนั้น นอกจากนี้คำชี้แจงสำหรับวิธีแก้ปัญหาของ Joe Holloway: ปัญหาไม่ได้อยู่ที่เชลล์ค้นหา pip แต่เป็นความจริงที่ว่า pip ระบุpython ผิด ดังนั้นคุณจะต้องระบุ python ด้วยตัวเองดังนี้:$ ~/.virtualenvs/venv/bin/python ~/.virtualenvs/venv/bin/pip --version
Neil Traft

ฉันพบปัญหานี้หลังจาก--relocatableenv ของฉันและบรรทัดที่ 42 ผิดดูเหมือนว่า--relocatableจะทำงานไม่ถูกต้อง
shellbye

4
สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันเปลี่ยนชื่อไดเรกทอรีกลางดังนั้นฉันต้องแก้ไขสคริปต์เปิดใช้งานและ pip ​​ใน '/ bin'
joarleymoraes

16

สำหรับฉันนี่ไม่ใช่ปัญหา pip หรือ Virtualenv มันเป็นปัญหางูหลาม ฉันได้ตั้งค่า $ PYTHONPATH ด้วยตนเองใน ~ / .bash_profile (หรือ ~ / .bashrc) หลังจากทำตามบทช่วยสอนออนไลน์ การตั้งค่า $ PYTHONPATH ด้วยตนเองนี้มีอยู่ใน Virtualenv ตามที่ควรจะได้รับอนุญาต

นอกจากนี้add2virtualenvยังไม่ได้เพิ่มเส้นทางโครงการของฉันไปยัง $ PYTHONPATH ของฉันด้วยเหตุผลบางประการภายใน Virtualenv

เส้นทางส้อมสำหรับผู้ที่อาจยังติดขัด! ไชโย!


11

ฉันมีปัญหาเดียวกันฉันแก้ไขได้โดยการลบไดเรกทอรี venv และสร้างใหม่!

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

ตอนนี้ทุกอย่างทำงานเหมือนมีเสน่ห์


ฉันใช้pip3ในขณะที่ Virtualenv โดยค่าเริ่มต้นใช้ python2 จึงใช้pipแทนpip3. ฉันจะตรวจสอบเพื่อหาไม่มีbin pip3การใช้virtualenv -p python3 venvแก้ไขปัญหา
subtleseeker

สิ่งนี้ช่วยแก้ปัญหาของฉันได้ การสร้าง Virtualenv อัตโนมัติของ Pycharm ทำงานไม่ถูกต้อง การติดตั้งด้วยตนเองทำเคล็ดลับ ขอบคุณ.
Loaderon

6

สิ่งแรกที่ต้องตรวจสอบคือตำแหน่ง pip ที่แก้ไขไปที่:

which pip

หากคุณอยู่ใน Virtualenv คุณคาดหวังว่าสิ่งนี้จะให้สิ่งต่างๆเช่น:

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

อย่างไรก็ตามอาจเป็นกรณีที่การแก้ไข pip ระบบของคุณด้วยเหตุผลบางประการ ตัวอย่างเช่นคุณอาจเห็นสิ่งนี้จากภายใน Virtualenv ของคุณ (สิ่งนี้ไม่ดี):

/ usr / local / bin / pip (หรืออะไรก็ได้ที่ไม่ได้อยู่ในเส้นทาง Virtualenv ของคุณ)

วิธีแก้ปัญหานี้ให้ตรวจสอบ pipconfig ของคุณใน:

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

และตรวจสอบให้แน่ใจว่าไม่มีสิ่งใดที่บังคับเส้นทาง Python หรือเส้นทาง pip ของคุณ (สิ่งนี้แก้ไขให้ฉัน)

จากนั้นลองเริ่มเทอร์มินัลใหม่และสร้าง Virtualenv ของคุณใหม่ (ลบแล้วสร้างอีกครั้ง)


2
ตรวจสอบด้วย/etc/pip.conf! ฉันมีปัญหาที่คล้ายกันและหลังจากการดีบักหลายครั้งพบว่ามีคนกำหนดค่าระบบที่ฉันใช้งานไม่ถูกต้องโดยยุ่งกับไฟล์นี้
t

ฉันใช้ arch Linux ฉันคิดว่า /etc/pip.conf ถูกตั้งค่าโดย OS
Q. Qiao

ขอบคุณ! คุณช่วยวันของฉัน! การกำหนดค่าเหล่านั้นเป็นเหมือนผีที่ซ่อนอยู่ในระบบไฟล์
MewX

2
ฉันมีนามแฝงที่กำหนดเซสชันเทอร์มินัลซึ่งลบล้าง pip ด้วยเหตุผลบางประการwhich pipยังคงให้เส้นทางที่ถูกต้องแก่ฉัน!
Matteo

5

ฉันก็มีปัญหานี้เหมือนกัน การโทรpip install <package_name>จาก/binไดเร็กทอรีภายในสภาพแวดล้อมเสมือน Python 3.3 บน Mavericks Mac ของฉันทำให้แพคเกจ Python ถูกติดตั้งในไดเร็กทอรีแพ็กเกจไซต์ส่วนกลางของ Python 2.7 นี่เป็นความจริงที่ว่า $ PATH ของฉันเริ่มต้นด้วยไดเรกทอรีที่มีpip. แปลก. สิ่งนี้ไม่เกิดขึ้นบน CentOS สำหรับผมแล้วการแก้ปัญหาที่ถูกเรียกแทนpip3 pipเมื่อผมได้ติดตั้งจุดเล็ก ๆภายในสภาพแวดล้อมเสมือนจริงผ่านez_setupสาม "pip" executables ได้รับการติดตั้งใน/binไดเรกทอรี - pip, และpip3 pip3.3ทั้งสามไฟล์เหมือนกันทุกประการ โทรpip3 install <package_name>ทำให้แพคเกจ Python ถูกติดตั้งอย่างถูกต้องในไดเร็กทอรีไซต์แพ็กเกจภายในเครื่อง การเรียกpipด้วยชื่อพา ธ แบบเต็มในสภาพแวดล้อมเสมือนก็ทำงานได้อย่างถูกต้อง ฉันสนใจที่จะทราบว่าเหตุใด Mac ของฉันจึงไม่ใช้ $ PATH ในแบบที่ฉันคาดหวัง


5

ฉันมีปัญหาเดียวกันกับ macos ที่ติดตั้ง python 2 และ 3

นอกจากนี้ฉันมีนามแฝงที่ชี้ไปที่ python3 และ pip3 ใน.bash_profileไฟล์.

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

การลบนามแฝงและการสร้าง env เสมือนใหม่โดยใช้python3 -m venv venvแก้ไขปัญหาได้


การติดตั้ง macos python นั้นเจ็บปวดโดยไม่จำเป็น
iomv

ฉันกำลังดึงผมออกและนี่คือสิ่งที่แก้ไขได้ในที่สุดสำหรับฉัน: "ซึ่ง pip" เปิดเผยปัญหา "unalias pip" ได้แก้ไขแล้ว
Colin

4

ฉันประสบปัญหาเดียวกันขณะติดตั้งแพคเกจ python จากภายใน Virtualenv สาเหตุที่แท้จริงในกรณีของฉันแตกต่างกัน จากภายใน Virtualenv ฉัน (ไม่เคยชินกับ Ubuntu) ทำ:

sudo easy_install -Z <package>

สิ่งนี้ทำให้ bin / pip shebang ถูกละเว้นและใช้ python non Virtualenv ของ root เพื่อติดตั้งใน global site-package เนื่องจากเรามีสภาพแวดล้อมเสมือนจริงเราจึงควรติดตั้งแพ็คเกจโดยไม่มี "sudo"


4

ฉันสะดุดกับปัญหาเดียวกันกับการรัน Manjaro ฉันสร้างสภาพแวดล้อมเสมือนโดยใช้python3 -m ven venvแล้วเปิดใช้งานโดยใช้source venv/bin/actiave. which pythonและwhich pipทั้งสองชี้ไปยังไบนารีที่ถูกต้องใน Virtualenv อย่างไรก็ตามฉันไม่สามารถติดตั้งไปยัง Virtualenv ได้แม้ว่าจะใช้เส้นทางแบบเต็มของไบนารี sudo pacman -R python-pip python-reportlabปรากฎว่าเมื่อฉันถอนการติดตั้งแพ็คเกจ python-pip ด้วย(ต้องรวม reportlab เพื่อตอบสนองการอ้างอิง) ทุกอย่างเริ่มทำงานตามที่คาดไว้ ไม่แน่ใจว่าทำไม แต่อาจเกิดจากการติดตั้งสองครั้งโดยที่แพคเกจระบบมีความสำคัญ


ฉันมีปัญหานี้กับ Manjaro ด้วยและแก้ไขด้วยวิธีเดียวกัน หลังจากแก้ไขแล้วฉันติดตั้งใหม่python-pipผ่าน pamac และ pip ​​Virtualenv ยังคงทำงานได้อย่างถูกต้อง ไม่แน่ใจว่าเกิดอะไรขึ้น แต่ฉันเห็นด้วยกับการประเมินปัญหาการติดตั้งซ้ำซ้อนของคุณ
sid

3

ฉันมีปัญหาที่คล้ายกันหลังจากอัปเดตเป็นpip==8.0.0. ต้องใช้การดีบัก pip เพื่อติดตามเส้นทางที่ไม่ดี

ปรากฎว่าไดเร็กทอรีโปรไฟล์ของฉันมีไฟล์คอนฟิกูเรชันที่มีค่าพา ธ ว่างอยู่ สิ่งนี้ทำให้แพ็กเกจทั้งหมดถูกติดตั้งในไดเร็กทอรีรูทเดียวกันแทนที่จะเป็นสภาพแวดล้อมเสมือนที่เหมาะสม (ในกรณีของฉัน/lib/site-packages)

ฉันไม่แน่ใจว่าไฟล์ config ไปอยู่ที่นั่นได้อย่างไรหรือมีค่าว่างได้อย่างไร แต่มันเริ่มต้นหลังจากอัปเดต pip

ในกรณีที่ใครก็ตามพบปัญหาเดียวกันนี้เพียงแค่ลบไฟล์~/.pydistutils.cfg(หรือลบเส้นทางการกำหนดค่าที่ว่างเปล่า) แก้ไขปัญหาในสภาพแวดล้อมของฉันเนื่องจาก pip กลับไปที่การกำหนดค่าเริ่มต้นแบบกระจาย


1
ปัญหานี้ของฉันเช่นกัน ไฟล์ของฉันเป็นแบบนี้ไม่รู้ว่ามันไปอยู่ที่นั่นได้อย่างไร:[install]\nprefix=
foslock

1
@foslock ใช่นั่นคือสิ่งที่ฉันดูเหมือนเช่นกัน ข่าวร้ายฮ่าฮ่า!
Josiah Ruddell


1

เจอปัญหาเดียวกันในวันนี้ ฉันเพิ่งติดตั้ง pip ใหม่ทั่วโลกด้วยsudo easy_install pip(OSX / Max) จากนั้นสร้าง Virtualenv ของฉันอีกครั้งด้วยsudo virtualenv nameOfVEnv. จากนั้นหลังจากเปิดใช้งาน Virtualenv ใหม่pipคำสั่งก็ทำงานตามที่คาดไว้

ฉันไม่คิดว่าฉันใช้sudoในการสร้าง Virtualenv ครั้งแรกและนั่นอาจเป็นสาเหตุที่ไม่มีการเข้าถึงpipจากภายใน Virtualenv ฉันสามารถเข้าถึงpip2ก่อนการแก้ไขนี้ได้แม้ว่าจะแปลกก็ตาม


ฉันได้รับสิ่งนี้เพราะฉันย้ายไดเรกทอรีไปยังเส้นทางอื่นและจำเป็นvirtualenvต้องเรียกใช้อีกครั้ง
citynorman

1

ต่อไปนี้เป็นแนวทางปฏิบัติบางประการที่สามารถหลีกเลี่ยงอาการปวดหัวเมื่อใช้สภาพแวดล้อมเสมือน:

  • สร้างโฟลเดอร์สำหรับโครงการของคุณ
  • สร้างVirtualenvของคุณโครงการภายในโฟลเดอร์นี้
  • หลังจากเปิดใช้งานสภาพแวดล้อมของโปรเจ็กต์ของคุณอย่าใช้ " sudo pip install packageแล้วห้าม "
  • หลังจากเสร็จสิ้นการทำงานของคุณเสมอ " ปิดใช้งาน " สภาพแวดล้อมของคุณเสมอ
  • หลีกเลี่ยงการเปลี่ยนชื่อโฟลเดอร์โครงการของคุณ


เพื่อให้เห็นถึงแนวทางปฏิบัตินี้ได้ดีขึ้นนี่คือการจำลอง:


การสร้างโฟลเดอร์สำหรับโครงการ / สภาพแวดล้อมของคุณ

$ mkdir venv

การสร้างสภาพแวดล้อม

$ cd venv/ 

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

เปิดใช้งานสภาพแวดล้อม

$ source google_drive/bin/activate

การติดตั้งแพ็คเกจ

(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...

แพ็คเกจที่มีอยู่ในสิ่งแวดล้อม

(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()
>>>

ปิดใช้งานสภาพแวดล้อม

(google_drive) $ deactivate 

$ 

แพ็คเกจไม่พร้อมใช้งานนอกสภาพแวดล้อม

(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
>>> 

หมายเหตุ:

ทำไมไม่ sudo?

Virtualenv สร้างสภาพแวดล้อมใหม่สำหรับคุณโดยกำหนด $ PATH และตัวแปรและการตั้งค่าอื่น ๆ เมื่อคุณใช้แพ็คเกจการติดตั้ง sudo pipคุณกำลังเรียกใช้ Virtualenv เป็นรูทโดยหลีกเลี่ยงสภาพแวดล้อมทั้งหมดที่สร้างขึ้นจากนั้นติดตั้งแพ็คเกจบนแพ็คเกจไซต์ส่วนกลางไม่ใช่ภายในโฟลเดอร์โครงการที่คุณมีสภาพแวดล้อมเสมือนแม้ว่าคุณจะ ได้เปิดใช้งานสภาพแวดล้อม

หากคุณเปลี่ยนชื่อโฟลเดอร์ของโครงการของคุณ (ตามที่ระบุไว้ในคำตอบที่ยอมรับ) ...

... คุณจะต้องปรับตัวแปรบางอย่างจากไฟล์บางไฟล์ในถังขยะไดเร็กทอรีของโปรเจ็กต์ของคุณ

ตัวอย่างเช่น:

bin / pip บรรทัดที่ 1 (She Bang)

bin / เปิดใช้งานบรรทัดที่ 42 (VIRTUAL_ENV)


1

ฉันมีปัญหานี้ ปรากฎว่ามีช่องว่างในชื่อโฟลเดอร์ของฉันที่ทำให้เกิดปัญหา ฉันลบพื้นที่ลบและคืนสถานะโดยใช้ venv และทุกอย่างก็เรียบร้อยดี


1

ปัญหานี้เกิดขึ้นเมื่อสร้างอินสแตนซ์ Virtualenv แล้วเปลี่ยนชื่อโฟลเดอร์หลัก


1

วิธีแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉัน

Venv ของฉันทำงานอยู่ pip -Vและwhich pipให้เส้นทาง Virtualenv ที่ถูกต้องแก่ฉัน แต่เมื่อ I pip install-ed แพ็คเกจที่เปิดใช้งาน venv ฉันpip freezeก็ว่าง

ตัวแปรสภาพแวดล้อมทั้งหมดก็ถูกต้องเช่นกัน

สุดท้ายฉันเพิ่งเปลี่ยน pip และลบ Virtualenv:

easy_install pip==7.0.2

pip install pip==10

sudo pip uninstall virtualenv

ติดตั้ง Venv อีกครั้ง:

sudo pip install virtualenv

สร้าง venv:

python -m virtualenv venv_name_here

และแพ็คเกจทั้งหมดติดตั้งอย่างถูกต้องใน Venv ของฉันอีกครั้ง


1

หลังจากสร้างสภาพแวดล้อมเสมือนแล้วให้ลองใช้ pip ที่อยู่ในVirtualEnvName \ Scripts ของคุณ

ควรติดตั้งแพ็คเกจภายในLib \ site-packageในสภาพแวดล้อมเสมือนของคุณ


1

ฉันมีปัญหาที่คล้ายกันใน Windows มันเกิดจากการเปลี่ยนชื่อโครงสร้างโฟลเดอร์ในโปรเจ็กต์ของฉันภายในชื่อโฟลเดอร์ Virtualenv พา ธ ในไฟล์ไม่เปลี่ยนแปลง แต่ยังคงเหมือนเดิมเมื่อสร้าง virtual env ดังที่ Chase Ries กล่าวถึงฉันได้เปลี่ยนเส้นทางเป็น VIRTUAL_ENV และ python.exe ในไฟล์

  1. ./venv/Scripts/activate.bat , set "VIRTUAL_ENV=path_to_venv\venv"11 บรรทัดในไฟล์
  2. ./venv/Scripts/Activate.ps1 , $env:VIRTUAL_ENV="path_to_venv\venv"30 บรรทัดในไฟล์
  3. ./venv/Scripts/pip.exe ,#!d:\path_to_env\venv\scripts\python.exeสายนี้เป็นที่สิ้นสุดของไฟล์ในกรณีของฉันย้ายไปทางขวาใน 667 สาย, ฉันกำลังทำงานบนแผ่นดิสก์ d ดังนั้นที่จุดเริ่มต้นของเส้นทางเป็นตัวอักษรของมัน
  4. ./venv/Scripts/pip3.7.exe ,#!d:\path_to_env\venv\scripts\python.exeสายนี้เป็นที่สิ้นสุดของไฟล์ในกรณีของฉันย้ายไปทางขวาใน 667 เส้น
  5. ./venv/Scripts/pip3.exe , #!d:\path_to_env\venv\scripts\python.exeสายนี้เป็นที่สิ้นสุดของไฟล์ในกรณีของฉันย้ายไปทางขวาใน 667 เส้น

0

ฉันก็มีปัญหานี้เหมือนกัน การโทรsudo pip installทำให้แพคเกจ Python ถูกติดตั้งในไดร์ทอรีแพ็คเกจไซต์ทั่วโลกและการโทรpip installก็ทำงานได้ดี ดังนั้นอย่าใช้sudoใน Virtualenv


หรือถ้าคุณใช้ sudo คุณต้องเปิดใช้งานสภาพแวดล้อมเสมือนด้วย sudo suตามมาด้วยตามมาด้วย<venv>/bin/activate pip install
Dave

0

ปัญหาเดียวกัน. Python3.5 และ pip 8.0.2 ติดตั้งจากลินุกซ์rpm's

ฉันไม่พบสาเหตุหลักและไม่สามารถให้คำตอบที่เหมาะสมได้ ดูเหมือนว่ามีสาเหตุหลายประการ

อย่างไรก็ตามฉันหวังว่าฉันจะสามารถช่วยแบ่งปันข้อสังเกตและวิธีแก้ปัญหาได้

  1. pyvenv ด้วย --system-site-packages

    • ./binไม่ได้มีpip, pipสามารถใช้ได้จากแพคเกจเว็บไซต์ระบบ
    • มีการติดตั้งแพ็คเกจทั่วโลก ( BUG? )
  2. pyvenv ไม่มี --system-site-packages

    • pipได้รับการติดตั้ง./binแต่เป็นเวอร์ชันอื่น (จากensurepip)
    • แพคเกจถูกติดตั้งภายในสภาพแวดล้อมเสมือน ( OK )

วิธีแก้ปัญหาที่ชัดเจนสำหรับpyvenvกับ--system-site-packages:

  • สร้างโดยไม่มี--system-site-packagesตัวเลือก
  • เปลี่ยนinclude-system-site-packages = falseไปtrueในpyvenv.cfgไฟล์

0

นอกจากนี้ยังควรตรวจสอบว่าคุณไม่ได้แก้ไขเส้นทางไปยัง Virtualenv ของคุณ

ในกรณีนั้นบรรทัดแรกในbin/pip(และส่วนที่เหลือของไฟล์ปฏิบัติการ) จะมีเส้นทางที่ไม่ถูกต้อง

คุณสามารถแก้ไขไฟล์เหล่านี้และแก้ไขเส้นทางหรือลบและติดตั้ง Virtualenv อีกครั้ง


0

สำหรับ Python 3ers

ลองอัปเดต ฉันมีปัญหาเดียวกันนี้และลองใช้คำตอบของ Chases แต่ก็ไม่ประสบความสำเร็จ วิธีที่เร็วที่สุดในการปรับโครงสร้างใหม่คือการอัปเดตเวอร์ชัน Python Minor / Patch ของคุณหากเป็นไปได้ ฉันสังเกตว่าฉันใช้งาน 3.5.1 และอัปเดตเป็น 3.5.2 Pyvenv ใช้งานได้อีกครั้ง


0

สิ่งนี้เกิดขึ้นกับฉันเมื่อฉันสร้าง Virtualenv ในตำแหน่งที่ไม่ถูกต้อง จากนั้นฉันก็คิดว่าฉันสามารถย้ายผบ. ไปที่อื่นได้โดยไม่ต้องกังวล มันมีความสำคัญ

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

โอ้อึฉันลืมลงซีดีprojectsก่อนที่จะสร้าง Virtualenv และโคลนตัวแทน โอ้ฉันขี้เกียจเกินไปที่จะทำลายและสร้างขึ้นใหม่ ฉันจะย้ายผบ. โดยไม่มีปัญหา

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

ไม่ต้องการสิทธิ์เพิ่มเติมอะไร? ฉันคิดว่ามันแปลก แต่ SUDO Away! จากนั้นติดตั้งแพ็คเกจลงในตำแหน่งที่ตั้งส่วนกลาง

บทเรียนที่ฉันได้เรียนรู้คือเพียงแค่ลบคำสั่ง Virtualenv อย่าขยับมัน


0

มีปัญหานี้หลังจากติดตั้ง Divio: มีการเปลี่ยนแปลงเส้นทางหรือสภาพแวดล้อมของฉันไม่ทางใดก็ทางหนึ่งเมื่อเปิดตัวเทอร์มินัล

วิธีแก้ปัญหาในกรณีนี้เป็นเพียงการทำsource ~/.bash_profileซึ่งควรตั้งค่าไว้แล้วเพื่อให้คุณกลับสู่สถานะ pyenv / pyenv-Virtualenv เดิมของคุณ


0

อย่างไรก็ตามไฟล์ setup.cfg ที่มีคำนำหน้า = "" ในโฟลเดอร์โครงการ

การรันการติดตั้ง pip บน Virtualenv นอกโฟลเดอร์โปรเจ็กต์นั้นทำงานได้จากภายในมันเป็นการบอกให้ pip ใช้คำนำหน้าว่างซึ่งค่าเริ่มต้นเป็น "/"

การลบไฟล์ได้รับการแก้ไข


0

ฉันมีปัญหานี้และหลังจากลองวิธีแก้ปัญหาข้างต้นทั้งหมดฉันเพิ่งลบทุกอย่างออกและเริ่มใหม่อีกครั้ง

ในกรณีของฉันฉันใช้sudoในการสร้างหนึ่งในโฟลเดอร์ที่มีสภาพแวดล้อมเสมือนจริงและ sudo ให้สิทธิ์ในการรูท

ฉันโกรธมาก! แต่มันได้ผล!


0

ฉันต้องใช้ 'sudo' เพื่อติดตั้งแพ็คเกจผ่าน pip บนระบบ ubuntu ของฉันด้วยเหตุผลบางประการ ซึ่งทำให้แพ็กเกจถูกติดตั้งในแพ็คเกจไซต์ส่วนกลาง ใส่ไว้ที่นี่สำหรับทุกคนที่อาจประสบปัญหานี้ในอนาคต


0

ฉันมีปัญหาตรงตามชื่อเรื่องและฉันก็แก้ไขได้ Pip เริ่มติดตั้งในแพ็คเกจไซต์ venv หลังจากที่ฉันทำความสะอาด PATH ของฉัน: มันมีเส้นทางไปยังไดเร็กทอรี ~ / bin ในเครื่องของฉันในตอนเริ่มต้น

ดังนั้นคำแนะนำของฉัน: ตรวจสอบตัวแปรสภาพแวดล้อมของคุณอย่างละเอียดเพื่อหา "ขยะ" หรือสิ่งที่ไม่ได้มาตรฐาน น่าเสียดายที่ Virtualenv สามารถไวต่อสิ่งเหล่านั้นได้

โชคดี!


0

คำตอบสั้น ๆ คือเรียกใช้ Command Virtualenv ด้วยพารามิเตอร์“ —no-site-Packages”

คำตอบยาวพร้อมคำอธิบาย: -

ดังนั้นหลังจากทำงานที่นี่และที่นั่นและผ่านหลายหัวข้อฉันพบว่าตัวเองมีปัญหา คำตอบข้างต้นได้ให้แนวคิด แต่ฉันอยากจะพูดถึงทุกอย่างอีกครั้ง

  • ปัญหาคือแม้ว่าคุณจะเปิดใช้งานสภาพแวดล้อม แต่ก็อ้างถึงสภาพแวดล้อมของระบบเนื่องจากวิธีการที่เราได้จัดทำ Virtualenv

  • เมื่อเรารันคำสั่งVirtualenv env -p python3 มันจะติดตั้งVirtualenvแต่จะไม่สร้าง no-global - site-Packages.txt

  • ด้วยเหตุนี้เมื่อคุณเปิดใช้งานสภาพแวดล้อมตามคำสั่งเปิดใช้งานแหล่งที่มามีไฟล์นี้ชื่อว่า site.py (ชื่ออาจแตกต่างกันฉันเพิ่งลืม) ซึ่งรันและตรวจสอบว่าไม่มีไฟล์นี้หรือไม่ไฟล์นี้จะไม่เพิ่มเส้นทาง env ของคุณไปยัง sys.path และใช้ระบบ python

  • เพื่อแก้ไขปัญหานี้เพียงแค่เรียกใช้ Virtualenv ด้วยพารามิเตอร์พิเศษ - ไม่มีไซต์แพ็กเกจมันจะสร้างไฟล์นั้นและเมื่อคุณเปิดใช้งานสภาพแวดล้อมระบบจะเพิ่มเส้นทางสภาพแวดล้อมที่กำหนดเองของคุณในตัวแปร PATH ของคุณทำให้สามารถเข้าถึงได้


0

มีการอภิปรายที่ดีมากมายข้างต้น แต่มีการใช้ตัวอย่างของ Virtualenv เนื่องจากตอนนี้ 'conda' เป็นเครื่องมือที่แนะนำในการจัดการ Virtualenv ฉันจึงได้สรุปขั้นตอนในการเรียกใช้ pip ใน conda env ดังนี้

ฉันจะใช้ py36r เป็นชื่อของ env และ / opt / conda / envs เป็นคำนำหน้าของ 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

โปรดทราบว่า pip ที่ดำเนินการควรอยู่ใน/opt/conda/envs/py36r/bin/pip(not /opt/conda/bin/pip)

หรือคุณสามารถเรียกใช้สิ่งต่อไปนี้โดยไม่ต้องเปิดใช้งาน conda

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

นอกจากนี้หากคุณติดตั้งโดยใช้ conda คุณสามารถติดตั้งได้โดยไม่ต้องเปิดใช้งาน:

$ conda install -n py36r pkg_abc ...

0

WINDOWS

สำหรับฉันวิธีแก้ปัญหาไม่ได้ใช้ mkvirtualenvแต่:

python -m venv path/to/your/virtualenv

workon ทำงานได้อย่างถูกต้อง

ในขณะที่อยู่ใน Virtualenv: pip -Vแสดงเส้นทางไปยัง pip ของ Virtualenv

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.