ฉันต้องการจะดูว่าวิธีที่ดีที่สุดในการกำหนดไดเรกทอรีสคริปต์ปัจจุบันในหลามคืออะไร?
ฉันค้นพบว่าเนื่องจากการเรียกรหัสไพ ธ อนหลายวิธีทำให้หาทางออกที่ดีได้ยาก
นี่คือปัญหาบางอย่าง:
__file__
ไม่ได้กำหนดว่าสคริปต์ที่จะดำเนินการกับexec
,execfile
__module__
ถูกกำหนดในโมดูลเท่านั้น
ใช้กรณี:
./myfile.py
python myfile.py
./somedir/myfile.py
python somedir/myfile.py
execfile('myfile.py')
(จากสคริปต์อื่นที่สามารถอยู่ในไดเรกทอรีอื่นและสามารถมีไดเรกทอรีปัจจุบันอื่น
ฉันรู้ว่าไม่มีวิธีการแก้ปัญหาที่สมบูรณ์แบบ แต่ฉันกำลังมองหาวิธีที่ดีที่สุดที่สามารถแก้ไขกรณีส่วนใหญ่ได้
วิธีการที่ใช้มากที่สุดคือแต่นี้จริงๆไม่ทำงานถ้าคุณรันสคริปต์จากอีกคนหนึ่งด้วยos.path.dirname(os.path.abspath(__file__))
exec()
คำเตือน
โซลูชันใด ๆ ที่ใช้ไดเรกทอรีปัจจุบันจะล้มเหลวซึ่งอาจแตกต่างกันไปตามวิธีการเรียกใช้สคริปต์หรือสามารถเปลี่ยนแปลงได้ภายในสคริปต์ที่กำลังเรียกใช้
pathlib
โซลูชันของ Ron Kalian หากคุณใช้ python 3.4 ขึ้นไป: stackoverflow.com/a/48931294/1011724
python myfile.py
จากเปลือกหอยก็ทำงาน แต่ทั้งสอง:!python %
และ:!python myfile.py
จากภายในกลุ่มล้มเหลวด้วยระบบไม่สามารถหาเส้นทางที่ระบุไว้ มันค่อนข้างน่ารำคาญ ทุกคนสามารถแสดงความคิดเห็นเกี่ยวกับเหตุผลที่อยู่เบื้องหลังสิ่งนี้และวิธีแก้ปัญหาที่อาจเกิดขึ้นได้หรือไม่