คุณตั้งค่า pythonpath ของคุณใน Virtualenv ที่สร้างไว้แล้วได้อย่างไร?


106

ฉันจะแก้ไขไฟล์อะไรและทำอย่างไร ฉันสร้างสภาพแวดล้อมเสมือนจริง


ตรวจสอบว่าชี้ไปยังไดเรกทอรีที่ถูกต้อง หากคุณยังไม่มีให้คลิกปุ่มใหม่แล้วสร้าง

11
ใช้คำสั่งadd2virtualenv
29

5
add2virtualenv เป็นvirtualenvwrapperคำสั่ง virtualenvมันไม่ได้เป็นส่วนหนึ่งของ
kojiro

คำตอบ:


124

แก้ไข # 2

คำตอบที่ถูกต้องคือ@ หนึ่ง


หากคุณต้องการเปลี่ยนที่PYTHONPATHใช้ใน Virtualenv คุณสามารถเพิ่มบรรทัดต่อไปนี้ในbin/activateไฟล์ของ Virtualenv ของคุณ:

export PYTHONPATH="/the/path/you/want"

ด้วยวิธีนี้ระบบPYTHONPATHจะตั้งค่าใหม่ทุกครั้งที่คุณใช้ Virtualenv นี้

แก้ไข: (เพื่อตอบความคิดเห็นของ @ RamRachum)

หากต้องการคืนค่าเป็นค่าเดิมdeactivateคุณสามารถเพิ่มได้

export OLD_PYTHONPATH="$PYTHONPATH"

ก่อนบรรทัดที่กล่าวถึงก่อนหน้านี้และเพิ่มบรรทัดต่อไปนี้ในbin/postdeactivateสคริปต์ของคุณ

export PYTHONPATH="$OLD_PYTHONPATH"

1
มันจะถูกลบออกด้วยdeactivateหรือไม่?
รามราช

1
ดังนั้นนี่หมายความว่าสภาพแวดล้อมเสมือนที่สร้างขึ้นใหม่มีค่าเริ่มต้นPYTHONPATH(global one) แทนที่จะเป็นเส้นทางท้องถิ่น Virtualenv?
ducin

6
สิ่งนี้ได้ผลดีสำหรับฉันฉันไม่ได้ใช้ Virtualenvwrapper โปรดทราบว่าฉันไม่มีสคริปต์ bin / postdeactivate ดังกล่าวการเปิดใช้งาน rathere มีฟังก์ชันปิดการใช้งาน ดังนั้นควรวางบรรทัดของโค้ดไว้ที่นั่นโดยระมัดระวังที่จะรวมไว้ในคำสั่ง if เป็นส่วนที่เหลือของการดำเนินการในฟังก์ชัน
Niccolò

2
ดูเหมือนเป็นเรื่องแปลกที่ Virtualenv จะไม่ทำสิ่งนี้โดยค่าเริ่มต้น
Seth

2
แก้ไข # 2 เป็นเรื่องโกหก! :) คำตอบที่ถูกต้องคือ@ arjen-p-de-vries's one
Berriel

73

ความคิดเห็นโดย @ s29 ควรเป็นคำตอบ:

วิธีหนึ่งในการเพิ่มไดเร็กทอรีให้กับสภาพแวดล้อมเสมือนคือการติดตั้ง Virtualenvwrapper (ซึ่งมีประโยชน์หลายอย่าง) จากนั้นทำ

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

หากคุณต้องการลบเส้นทางเหล่านี้ให้แก้ไขไฟล์ myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

สามารถดูเอกสารเกี่ยวกับ Virtualenvwrapper ได้ที่http://virtualenvwrapper.readthedocs.org/en/latest/

เอกสารเฉพาะเกี่ยวกับคุณลักษณะนี้สามารถพบได้ที่ http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv


6
ที่จะลบ:add2virtualenv -d
thecheech

1
เพิ่งเชื่อมโยงคำตอบนี้ในของฉันเพราะมันดีกว่ามาก
mdeous

27

คุณสามารถสร้าง.pthไฟล์ที่มีไดเร็กทอรีที่ต้องการค้นหาและวางไว้ในsite-packagesไดเร็กทอรี เช่น:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

ผลเป็นเช่นเดียวกับการเพิ่ม/some/library/pathการsys.pathและยังคงท้องถิ่นเพื่อvirtualenvการติดตั้ง


7
ฉันชอบแนวทางนี้มาก ไม่เกือบจะไม่แน่นอนเท่ากับการเพิ่มบรรทัดเพื่อเปิดใช้งาน / ปิดใช้งานและไม่จำเป็นต้องใช้ Virtualenvwrapper ถ้าคุณไม่อยากวิงวอนหลามเพื่อหาสิ่งที่เว็บไซต์ของแพคเกจ-dir, $VIRTUALENV_ROOT/lib/pythonX.Y/site-packagesมันจะอยู่ที่เส้นทางที่ค่อนข้างคาดเดา เอกสารในไฟล์. pth: docs.python.org/3.6/library/site.html
Alec

2
ฉันไม่ต้องการพิมพ์ในพา ธ สัมบูรณ์เพราะพื้นที่ทำงานของฉันเคลื่อนที่ไปรอบ ๆ ระบบไฟล์ของฉัน และเส้นทางโครงการของฉันมีช่องว่าง ดังนั้นฉันพิมพ์คำสั่งที่แก้ไขเล็กน้อย: pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popdจากนั้นฉันก็ปิดใช้งาน Virtualenv ของฉันและเปิดใช้งานอีกครั้ง ตอนนี้ฉันสามารถเรียกใช้รหัสโครงการที่ต้องการทราบว่าไดเรกทอรีโครงการของฉันอยู่ที่ไหน
Jim DeLaHunt

4
นี่คือคำตอบที่ถูกต้อง การแก้ไขสคริปต์ที่ผู้จัดจำหน่ายจัดหาให้ ( /bin/activate) เป็นการทุจริตต่อหน้าที่และการติดตั้งเครื่องมือของบุคคลที่สามนั้นด้อยกว่าการใช้วิธีในตัวเพื่อให้ได้สิ่งเดียวกัน
แดง

2
  1. เริ่มต้น Virtualenv ของคุณ
cd venv

source bin/activate
  1. เพียงแค่ตั้งค่าหรือเปลี่ยนเส้นทาง python ของคุณโดยป้อนคำสั่งดังต่อไปนี้:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. สำหรับการตรวจสอบเส้นทาง python ป้อนใน python:
   python

      \>\> import sys

      \>\> sys.path

1

ฉันแก้ไขสคริปต์เปิดใช้งานเพื่อซอร์สไฟล์.virtualenvrcหากมีอยู่ในไดเร็กทอรีปัจจุบันและเพื่อบันทึก / เรียกคืนPYTHONPATHเมื่อเปิดใช้งาน / ปิดใช้งาน

คุณสามารถค้นหาactivateสคริปต์ที่แก้ไขได้ที่นี่ . เป็นการแทนที่ดร็อปอินสำหรับสคริปต์เปิดใช้งานที่สร้างโดย Virtualenv 1.11.6

จากนั้นฉันเพิ่มสิ่งนี้ใน.virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"

-20

มีคำตอบแล้วที่นี่ -> สภาพแวดล้อมเสมือน (python) ของฉันทำให้ PYTHONPATH ของฉันพังหรือไม่?

ยูนิกซ์ / ลินุกซ์

เพิ่ม "export PYTHONPATH = / usr / local / lib / python2.0" ลงในไฟล์ ~ / .bashrc และซอร์สไฟล์โดยพิมพ์ "source ~ / .bashrc" OR ". ~ / .bashrc"

WINDOWS XP

1) ไปที่แผงควบคุม 2) ดับเบิลคลิกระบบ 3) ไปที่แท็บขั้นสูง 4) คลิกที่ตัวแปรสภาพแวดล้อม

ในหน้าต่างตัวแปรระบบให้ตรวจสอบว่าคุณมีตัวแปรชื่อ PYTHONPATH หรือไม่ หากคุณมีอยู่แล้วให้ตรวจสอบว่าชี้ไปยังไดเรกทอรีที่ถูกต้อง หากคุณยังไม่มีให้คลิกปุ่มใหม่แล้วสร้าง

รหัส PYTHON

หรือคุณสามารถทำด้านล่างรหัสของคุณ: -

import sys
sys.path.append("/home/me/mypy") 

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