ตัวแปรสภาพแวดล้อม PYTHONPATH


19

ฉันมีสิ่งนี้ใน~/.profile:

export PYTHONPATH=/home/dev/python-files

ในpython-filesไดเรกทอรีฉันมีโครงการไม่กี่โคลนจาก git-hub (กระติกน้ำโค้งและ py-vgdl)

เมื่อใดก็ตามที่ฉันพยายามเริ่มตัวอย่างใด ๆ ในโครงการเหล่านี้ฉันได้รับข้อผิดพลาดคล้ายกับต่อไปนี้:

$ python ~/python-files/py-vgdl/examples/gridphysics/frogs.py 
Traceback (most recent call last):
    File "/home/dev/python-files/py-vgdl/examples/gridphysics/frogs.py", line 67, in <module>
        from vgdl.core import VGDLParser
ImportError: No module named vgdl.core

สำหรับฉันดูเหมือนว่าฉันไม่ควรได้รับข้อผิดพลาดนี้เนื่องจากฉันได้PYTHONPATHตั้งค่าตัวแปรสภาพแวดล้อมแล้วหรือยัง

การใช้ล่ามแบบหลาม:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'

คำตอบ:


35

ลองต่อท้าย PYTHONPATH แทนที่จะเขียนทับมันจนหมด

export PYTHONPATH=$PYTHONPATH:/home/dev/python-files

อ้างอิง:

ตามเอกสาร Python บน PYTHONPATH

เพิ่มเส้นทางการค้นหาเริ่มต้นสำหรับไฟล์โมดูล [ ... ]

พา ธ การค้นหาเริ่มต้นนั้นขึ้นอยู่กับการติดตั้ง แต่โดยทั่วไปจะเริ่มต้นด้วยprefix/lib/pythonversion(ดูPYTHONHOMEด้านบน) มันเป็นเสมอPYTHONPATHท้าย

หมายความว่ามีค่าบางค่าอยู่PYTHONPATHและเส้นทางการค้นหาเริ่มต้นจะต่อท้ายเท่านั้น

นอกจากนี้บล็อกโพสต์นี้ ( ลิงก์ Archive.org ) ยังอธิบายอย่างชัดเจนว่าทำไมคุณต้องผนวกPYTHONPATHและไม่เขียนทับมัน เลื่อนลงไปที่ส่วน - กรณีพิเศษและตรวจสอบเส้นทางการค้นหาอธิบายอย่างชัดเจน (น่าเสียดายที่ไม่มี URL สัมพัทธ์กับลิงค์นั้นดังนั้นคุณจะต้องเลื่อน) แม้ว่าผู้ใช้จะให้ตัวอย่างบน mac พวกเขามีความเกี่ยวข้องอย่างมากกับแพลตฟอร์มใด ๆ


1
@ Garrett ขอบคุณ :) อัปเดตด้วยลิงก์ Archive.org
Nitin Venkatesh

+1 สำหรับลิงก์เก็บถาวร / stereoplex มันตอบคำถามมากมายที่ควรจะอยู่ในหน้าแรกของเอกสาร Python อย่างเป็นทางการ!
Malik A. Rumi

5

คุณยังสามารถทำสิ่งต่อไปนี้:

export PYTHONPATH=$(pwd) **or** export PYTHONPATH=${PWD}

pwd เป็นไดเรกทอรีการทำงานปัจจุบัน


ระวังสิ่งนี้จะเขียนทับ PYTHONPATH ของคุณในกระบวนการ! หากคุณต้องการเพิ่ม pwd ใน PYTHONPATH ของคุณ:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111

4

PYTHONPATHควรชี้ไปที่แพคเกจและโมดูล Python ของคุณอยู่ที่ไหน กล่าวอีกนัยหนึ่งถ้าคุณทำเช่นนั้นls "$PYTHONPATH"คุณจะเห็น*.pyไฟล์ ( โมดูล Python ) และไดเรกทอรีที่มี__init__.pyไฟล์ ( แพ็คเกจ Python )

ดังนั้นหากคุณต้องการสามารถทำได้import vgdlคุณPYTHONPATHควรมีลักษณะเช่นนี้:

PYTHONPATH=/home/dev/python-files/py-vgdl

เพราะvgdl แพคเกจที่อยู่ภายในไม่ภายในpy-vgdlpython-files

หากต้องการเพิ่มเส้นทางอื่นด้วยคุณสามารถใช้:เพื่อแยกเส้นทางเหล่านี้:

PYTHONPATH="/home/dev/python-files/py-vgdl:/home/dev/python-files/something:$PYTHONPATH"

อย่างไรก็ตามวิธีนี้ใช้งานได้จริงสำหรับกรณีดังกล่าวการใช้งานPYTHONPATHอาจซับซ้อนเกินไป สิ่งที่ฉันแนะนำคือการใช้งานvirtualenvซึ่งมีจุดประสงค์เพื่อลดความซับซ้อนของสถานการณ์เช่นคุณ สิ่งที่คุณต้องทำก็คือ:

  1. สร้างสภาพแวดล้อม: virtualenv env
  2. 'เปิดใช้งาน' มัน: source env/bin/activate
  3. ติดตั้งแพ็คเกจของคุณ: สิ่งนี้สามารถทำได้โดยใช้pipหรือsetup.pyสคริปต์ของแพ็คเกจของคุณ
  4. สนุก.

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

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