การเพิ่มไดเร็กทอรีไปยัง sys.path / PYTHONPATH


130

ฉันกำลังพยายามนำเข้าโมดูลจากไดเร็กทอรีเฉพาะ

ปัญหาคือถ้าฉันใช้sys.path.append(mod_directory)เพื่อต่อท้ายพา ธ แล้วเปิดตัวแปล python ไดเร็กทอรีmod_directoryจะถูกเพิ่มที่ท้ายรายการ sys.path ถ้าฉันส่งออกPYTHONPATHตัวแปรก่อนเปิดตัวแปล python ไดเร็กทอรีจะถูกเพิ่มไปที่จุดเริ่มต้นของรายการ ในกรณีหลังนี้ฉันสามารถนำเข้าโมดูลได้ แต่ก่อนหน้านี้ฉันทำไม่ได้

มีใครอธิบายได้ไหมว่าทำไมสิ่งนี้จึงเกิดขึ้นและให้วิธีแก้ปัญหาเพื่อเพิ่มmod_directoryการเริ่มต้นภายในสคริปต์ python


ฉันได้ลองsiteโมดูลแล้ว
Zeinab Abbasimazar

คำตอบ:


178

สิ่งนี้ทำงานตามเอกสาร พา ธ ใด ๆ ที่ระบุในPYTHONPATHเอกสารตามปกติจะมาหลังจากไดเร็กทอรีการทำงาน แต่อยู่ก่อนพา ธ มาตรฐานที่ล่ามให้มา sys.path.append()ผนวกเข้ากับเส้นทางที่มีอยู่ ดูที่นี่และที่นี่ หากคุณต้องการให้ไดเร็กทอรีใดมาก่อนให้แทรกที่ส่วนหัวของ sys.path:

import sys
sys.path.insert(0,'/path/to/mod_directory')

ที่กล่าวว่ามักจะมีวิธีที่ดีกว่าในการจัดการการนำเข้ามากกว่าการใช้PYTHONPATHหรือจัดการsys.pathโดยตรง ดูตัวอย่างคำตอบของคำถามนี้


ขอบคุณสำหรับการตอบกลับ. ปัญหาคือฉันไม่ทราบว่าในการเพิ่มโมดูลที่บรรจุเป็นไฟล์. Egg คุณต้องรวมชื่อไฟล์แทนที่จะเป็นเพียงไดเร็กทอรีใน python 2.6
UnadulteratedImagination

2
เฮ้คนนี้ทำลาย django ของฉัน แน่ใจเหรอว่าจะบอกให้คนอื่นวางด้านบน?!? !!?
R Claven

16
@RClaven ขออภัยมันยากที่จะบอกว่าการกระทำและผลลัพธ์ที่คุณอ้างถึง: "วางไว้ที่ด้านบนสุด" และ "ทำลาย django ของฉัน" ไม่ได้แม่นยำมาก คุณสามารถอธิบายได้หรือไม่?
Ned Deily

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของ sys.path โปรดดูคำตอบนี้stackoverflow.com/a/38403654/850326
djhaskin987

2
คุณควรใช้ "1" แทน "0" จริงๆ! มิฉะนั้นคุณทำลายsys.path ดูที่stackoverflow.com/q/10095037/125507ด้วย
kadee


6

สำหรับฉันฉันต้องการคาเฟอีนไปยังเส้นทางหลามของฉัน ฉันสามารถเพิ่มพา ธ ไปยังไฟล์ได้ /home/xy/.bashrcโดยเพิ่ม

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH.

ไปยัง/home/xy/.bashrcไฟล์ของฉัน

แต่เมื่อฉันใช้ pycharm เส้นทางก็ยังไม่เข้า

ดังนั้นฉันสามารถเพิ่มเส้นทางไปยังPYTHONPATHตัวแปรโดยเรียกใช้ -> แก้ไขการกำหนดค่า

ใส่คำอธิบายภาพที่นี่


คำตอบที่ง่ายที่สุดคือการเพิ่มสิ่งนี้เพื่อการพัฒนาจะทำให้การเติมข้อความอัตโนมัติทำงานได้
Gang

ฉันได้อัปเดต. bashrc ตามที่อธิบายข้างต้นแล้ว แต่ไม่ได้แสดงในสมุดบันทึก jupyter สมุดบันทึก Jupyter ยังแจ้งว่าไม่พบโมดูล
Athar

3

การเปลี่ยนคำสั่งชั่วคราวใช้ได้ผลดีสำหรับการนำเข้า:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

เมื่อเรียกใช้สคริปต์ Python จาก Powershell ภายใต้ Windows สิ่งนี้ควรใช้งานได้:

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

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