Python - เพิ่ม PYTHONPATH ระหว่างการเรียกใช้โมดูลบรรทัดคำสั่ง


90

ฉันต้องการวิ่ง:

python somescript.py somecommand

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

คำตอบ:


151

สำหรับ Mac / Linux;

PYTHONPATH=/foo/bar/baz python somescript.py somecommand

สำหรับ Windows การติดตั้งเสื้อคลุมpythonpath.bat;

@ECHO OFF
setlocal
set PYTHONPATH=%1
python %2 %3
endlocal

และเรียกpythonpath.batไฟล์สคริปต์เช่น;

pythonpath.bat /foo/bar/baz somescript.py somecommand

@ İsmail - ขอบคุณ อย่างไรก็ตามฉันจะทำเช่นนั้นได้อย่างไรในขณะที่เรียกใช้สคริปต์จากพรอมต์คำสั่งของฉัน ฉันไม่ได้ใช้งาน Python นำเข้าข้อมูลและเรียกใช้ด้วยตนเอง
orokusaki

บน Mac / Linux คุณจะทำPYTHONPATH=/foo/bar python somescript.py somecommand
ismail

ฉันพยายามpython -c"import sys;sys.path.append('/my/dir')"แล้วpython myscript.py mycommandแต่เห็นได้ชัดว่ามันไม่ได้แบ่งปันเส้นทางจากเซสชันล่ามแรกกับครั้งต่อไป อาเพิ่งเห็นความคิดเห็นถัดไปของคุณกำลังลองตอนนี้ ... ไม่ได้ผลกับ WinXP
orokusaki

1
ไม่มีunsetคำสั่งตัวแปรสภาพแวดล้อมบน Windows แทนที่จะเพิ่ม a setlocalหลังค่าเริ่มต้นecho offจากนั้นโดยนัยendlocalจะเกิดขึ้นเมื่อสคริปต์. bat สิ้นสุดลง (และPYTHONPATHจะคืนค่าเป็นค่าก่อนหน้า)
martineau

5
บน Windows ถ้าคุณต้องการที่จะผนวกเส้นทางที่มีอยู่คุณอาจต้องการที่จะใช้PYTHONPATH set PYTHONPATH=%PYTHONPATH%;%1
martineau

49
 import sys
 sys.path.append('your certain directory')

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


10
หรือ sys.path.insert (0, '/ some / directory') เพื่อวางไว้ที่ด้านหน้าของเส้นทางของคุณ สิ่งนี้ช่วยให้เนื้อหาของคุณสามารถแทนที่สิ่งอื่น ๆ ที่อาจมีอยู่แล้วบน pythonpath
sienkiew

ฉันใช้คำตอบนี้เพื่อเรียกใช้ uninttest นอก pydev-eclipse IDE
LAL

sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')ตัวอย่างใน Windows
Bob Stein

10

หากคุณกำลังรันคำสั่งจากเชลล์ที่เข้ากันได้กับ POSIX bashคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมดังนี้:

PYTHONPATH="/path/to" python somescript.py somecommand

หากทุกอย่างอยู่ในบรรทัดเดียวค่าสภาพแวดล้อม PYTHONPATH จะใช้กับคำสั่งนั้นเท่านั้น

$ echo $PYTHONPATH

$ python -c 'import sys;print("/tmp/pydir" in sys.path)'
False
$ PYTHONPATH=/tmp/pydir python -c 'import sys;print("/tmp/pydir" in sys.path)'
True
$ echo $PYTHONPATH

สิ่งที่ฉันกำลังมองหาขอบคุณมาก ด้วยเหตุผลบางประการการรันpython -c "import sys; sys.path.insert(0,'my/path'); import mymodule"ไม่ทำงาน
Luke Davis


-1

สำหรับ windows:

ตัวอย่างเช่นฉันมีโฟลเดอร์ชื่อ "mygrapher" บนเดสก์ท็อป ภายในมีโฟลเดอร์ที่เรียกว่า "การคำนวณ" และ "การสร้างกราฟ" ซึ่งมีไฟล์ Python ที่ไฟล์หลัก "grapherMain.py" ของฉันต้องการ นอกจากนี้ "grapherMain.py" จะถูกเก็บไว้ใน "การสร้างกราฟ" หากต้องการเรียกใช้ทุกอย่างโดยไม่ต้องย้ายไฟล์ฉันสามารถสร้างสคริปต์แบตช์ได้ เรียกไฟล์แบตช์นี้ว่า rungraph.bat

@ECHO OFF
setlocal
set PYTHONPATH=%cd%\grapher;%cd%\calculation
python %cd%\grapher\grapherMain.py
endlocal

สคริปต์นี้อยู่ใน "mygrapher" ในการเรียกใช้สิ่งต่างๆฉันจะเข้าสู่พรอมต์คำสั่งของฉันจากนั้นทำ:

>cd Desktop\mygrapher (this navigates into the "mygrapher" folder)
>rungraph.bat (this executes the batch file)

6
และสิ่งนี้แตกต่างจากคำตอบของ @ İsmail 'cartman' Dönmezอย่างไร?
Alex Okrushko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.