ฉันจะเพิ่มเส้นทางไปยัง PYTHONPATH ใน Virtualenv ได้อย่างไร


99

ฉันกำลังพยายามเพิ่มเส้นทางไปยังตัวแปรสภาพแวดล้อม PYTHONPATH ซึ่งจะสามารถมองเห็นได้จากสภาพแวดล้อม Virtualenv เฉพาะเท่านั้น

ฉันพยายามSET PYTHONPATH=...ภายใต้พรอมต์คำสั่ง Virtualenv แต่ตั้งค่าตัวแปรสำหรับสภาพแวดล้อมทั้งหมด

ฉันจะบรรลุเป้าหมายนั้นได้อย่างไร?

คำตอบ:


158

คุณสามารถจะหลีกเลี่ยงที่จะทำอะไรกับ PYTHONPATH โดยใช้.pthไฟล์ เพียงใส่ไฟล์ที่มีนามสกุล. pth (ชื่อฐานใด ๆ ที่ใช้งานได้) ในโฟลเดอร์แพ็คเกจไซต์ของ Virtualenv ของคุณเช่นlib\python2.7\site-packagesด้วยพา ธ สัมบูรณ์ไปยังไดเร็กทอรีที่มีแพ็กเกจของคุณเป็นเนื้อหาเดียว


น่าเสียดายที่นี่ใช้ไม่ได้เป็นการลบล้าง มันต่อท้ายเส้นทางดังนั้นหากคุณกำลังพัฒนาก็ไม่ได้ผล
Erik Aronesty

นอกจากนี้ถ้าคุณรู้เส้นทางสัมบูรณ์ตัวแปรคืออะไร?
Jamie Marshall

คุณยังสามารถไปที่โฟลเดอร์ site-package ของสภาพแวดล้อมเสมือนและสร้างลิงก์สัญลักษณ์ไปยังไฟล์. pth ดังนี้: ln -s path / to / somfile.pth ฉันพบว่าสิ่งนี้มีประโยชน์เมื่อฉันต้องการให้ไดเรกทอรีเดียวกันสามารถเข้าถึงได้ในสภาพแวดล้อมเสมือนหลาย ๆ
Data-phile

91

หากคุณกำลังใช้virtualenvงานคุณควรจะใช้Virtualenvwrapperด้วยซึ่งในกรณีนี้คุณสามารถใช้คำสั่งadd2virtualenvเพื่อเพิ่มเส้นทางไปยังเส้นทาง Python สำหรับ Virtualenv ปัจจุบัน:

add2virtualenv directory1 directory2 …


3
วิธีการลบจาก Virtualenv?
silverdagger

1
ฉันต้องการเพิ่มความคิดเห็นที่เป็นมิตรซึ่งไม่ต้องการบนโฮสต์ที่ใช้ร่วมกันและสถานการณ์ที่คล้ายกัน venv wrapper ในกรณีเช่นนี้จะมีการใช้งาน venv หนึ่งรายการและไม่ต้องการสิ่งที่จำเป็นทั้งหมดในการติดตั้งเพิ่มเติม สิ่งต่างๆในพื้นที่แตกต่างกัน แต่บนเซิร์ฟเวอร์ / อิมเมจ KISS นั้นสำคัญมาก
Marc

2
ฉันไม่แน่ใจว่าคำสั่งทำงานอย่างไรเมื่อเขียน แต่add2virtualenvไม่ได้แก้ไข $ PYTHONPATH แต่จะแก้ไข sys.path
ForeverWintr

1
@ajostergaard: ขออภัยฉันควรให้แหล่งที่มา หากคุณดูซอร์สโค้ดสำหรับadd2virtualenvคุณจะเห็นว่ากำลังแก้ไข sys.path ฉันยอมรับว่าเอกสารทำให้ดูเหมือนว่ามันแก้ไขPYTHONPATHตัวแปรสภาพแวดล้อม แต่ดูเหมือนว่าจะไม่ถูกต้อง bitbucket.org/virtualenvwrapper/virtualenvwrapper/src/…
ForeverWintr

1
@ForeverWintr ฉันยืนแก้ไข - ไฟล์. pth ใช้ในการตั้งค่า sys.path docs.python.org/2/library/site.html Confused.com!
ostergaard

5

คุณยังสามารถลองใส่ symlink กับหนึ่งใน Virtualenv ของคุณ

เช่น. 1) เปิดใช้งาน Virtualenv ของคุณ 2) เรียกใช้ python 3) นำเข้า sys และตรวจสอบ sys.path 4) คุณจะพบเส้นทางการค้นหา python ที่นั่น เลือกหนึ่งในนั้น (เช่นแพ็คเกจไซต์) 5) ไปที่นั่นและสร้าง symlink ไปยังแพ็คเกจของคุณเช่น ln -s path-to-your-package name-with-which-You'll-be-import

ด้วยวิธีนี้คุณจะสามารถนำเข้าได้โดยไม่ต้องเปิดใช้งาน Virtualenv ของคุณ เพียงแค่ลอง: path-to-your-Virtualenv-folder / bin / python และนำเข้าแพ็คเกจของคุณ


ฉันเดาว่าสิ่งนี้ถูกลดลงสำหรับการใช้ symlinks มากกว่าไฟล์. pth แม้ว่ามันจะได้ผลสำหรับฉัน แต่อย่างไรก็ตาม
Gareth Davidson

3

หากคุณใช้ Virtualenvwrapper

$ cd to the parent folder
$ add2virtualenv  folder_to_add

คอนโซลจะแสดงขึ้น

Warning: Converting "folder_to_add" to "/absoutle/path/to/folder_to_add"

เพียงเท่านี้คุณก็ควรจะไป


1
import sys
import os

print(str(sys.path))

dir_path = os.path.dirname(os.path.realpath(__file__))
print("current working dir: %s" % dir_path)

sys.path.insert(0, dir_path)

ฉันขอแนะนำอย่างยิ่งให้คุณใช้ Virtualenv และ Virtualenvwrapper เพื่อหลีกเลี่ยงการเกะกะเส้นทาง


หากคุณต้องการให้สิ่งนี้ทำงานกับ python เวอร์ชันใดก็ได้ให้ใช้รูปแบบสตริงแบบเก่าปกติแทนที่จะใช้ f-string f "... {dir_path}"
Guillaume S

ขอบคุณสำหรับความคิดเห็น ฉันแก้ไขเพื่อการใช้งาน วิธีการแบบเก่านั้นยุ่งยากและแปลกใหม่และไม่มีอะไรที่น่าสนใจเกี่ยวกับระบบเทมเพลตง่ายๆ
Rubber Duck

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