Python: วิธีที่เป็นอิสระจากแพลตฟอร์มในการแก้ไขตัวแปรสภาพแวดล้อม PATH


คำตอบ:


174

คุณควรจะแก้ไขos.environได้

เนื่องจากos.pathsepเป็นอักขระในการแยกเส้นทางต่างๆคุณควรใช้สิ่งนี้เพื่อต่อท้ายเส้นทางใหม่:

os.environ["PATH"] += os.pathsep + path

หรือหากมีหลายเส้นทางที่จะเพิ่มในรายการ:

os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)

ดังที่คุณได้กล่าวมาแล้วos.path.joinยังสามารถใช้สำหรับแต่ละเส้นทางที่คุณต้องต่อท้ายในกรณีที่คุณต้องสร้างจากส่วนต่างๆที่แยกจากกัน


อะไรกับตัวคั่นสภาพแวดล้อม PATH? เหรอ? ลินุกซ์ - / usr / bin: / lib: ":" windows - C: \ asdf \; C: \ Prog ... ; ";"
บัว

2
@ บัว: คุณหมายถึงที่os.pathsepฉันพูดถึง (เฉพาะ PATH) หรือเปล่า?
RedGlyph

@RedGlyph ใช่ขอโทษฉันคิดว่า os.pathsep คือ "/" และ "\" ฉันไม่ได้ตรวจสอบก่อนที่จะอ้างสิทธิ์;)
บัว

11
@bua: มันเกือบจะเป็น "gotcha" os.path.sep != os.pathsepว่า
krawyoti

@krawyoti, bua: อ่าตอนนี้ฉันเห็นแล้ว ... มันเป็นข้อผิดพลาดที่ง่ายแน่นอน :-)
RedGlyph

18

โปรดทราบว่าos.environจริงๆแล้วไม่ใช่พจนานุกรม มันเป็นพจนานุกรมพิเศษเช่นวัตถุที่จริงชุดตัวแปรสภาพแวดล้อมในกระบวนการปัจจุบันใช้setenv

>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'

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

(เนื่องจากความคิดเห็นไม่สามารถมีการจัดรูปแบบได้ฉันจึงต้องใส่คำตอบนี้ แต่ฉันรู้สึกว่ามันเป็นประเด็นสำคัญที่ต้องทำนี่เป็นความคิดเห็นเกี่ยวกับความคิดเห็นเกี่ยวกับการไม่มีการเทียบเท่ากับ 'การส่งออก' )


6

ข้อควรระวังในการแก้ไขตัวแปรสภาพแวดล้อมใน Python คือไม่มีคำสั่งเชลล์ "export" ที่เทียบเท่า ไม่มีวิธีการฉีดการเปลี่ยนแปลงในกระบวนการปัจจุบันมีเพียงกระบวนการลูกเท่านั้น


1: ญาณเพื่อชี้ให้เห็นว่าคำสั่งที่ชอบos.system, os.popenหรือsubprocess.Popenแล้วควรจะใช้จากโปรแกรม Python ที่จะเปิดตัวกระบวนการอื่น ๆ ไม่งั้นก็ไม่มีจุดหมาย
RedGlyph

4
การชี้แจงคำสั่งของ Glyph: สิ่งนี้ไม่เป็นความจริงเนื่องจากการเปลี่ยนแปลงถูกแทรกเข้าไปในกระบวนการปัจจุบัน (ซึ่งก็คือกระบวนการ python) OP น่าจะหมายความว่าไม่มีวิธีการแทรกการเปลี่ยนแปลงในกระบวนการหลัก (ซึ่งโดยทั่วไปคือเชลล์ที่สคริปต์ python ถูกเรียกใช้)
PonyEars

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