เป็นไปได้หรือไม่ที่จะรันสคริปต์ python (ไม่ใช่โมดูล) จากภายใน ipython โดยไม่ระบุเส้นทาง ฉันพยายามตั้งค่า PYTHONPATH แต่ดูเหมือนว่าจะใช้ได้กับโมดูลเท่านั้น ฉันต้องการดำเนินการ
%run my_script.py
โดยไม่ต้องอยู่ในไดเร็กทอรีที่มีไฟล์
เป็นไปได้หรือไม่ที่จะรันสคริปต์ python (ไม่ใช่โมดูล) จากภายใน ipython โดยไม่ระบุเส้นทาง ฉันพยายามตั้งค่า PYTHONPATH แต่ดูเหมือนว่าจะใช้ได้กับโมดูลเท่านั้น ฉันต้องการดำเนินการ
%run my_script.py
โดยไม่ต้องอยู่ในไดเร็กทอรีที่มีไฟล์
คำตอบ:
จากภายในไดเรกทอรีของ "my_script.py" คุณสามารถทำได้:
%run ./my_script.py
SyntaxError: invalid syntax
ที่นี่ในหลามคอนโซล Python 3.5.3 บน Debian 9 อย่างไรก็ตามทำงานบน IPython
%run
เป็นคำสั่งเวทย์มนตร์ ipython ไม่ใช่ส่วนหนึ่งของภาษา Python เอง
import os
filepath='C:\\Users\\User\\FolderWithPythonScript'
os.chdir(filepath)
%run pyFileInThatFilePath.py
ที่ควรทำ
%run
มายากลมีพารามิเตอร์file_finder
ที่จะใช้เพื่อให้ได้เส้นทางแบบเต็มไปยังไฟล์ที่จะรัน (ดูที่นี่ ); ดังที่คุณทราบมันจะดูในไดเรกทอรีปัจจุบันต่อท้าย ".py" หากจำเป็น
มีไม่ได้ดูเหมือนจะเป็นวิธีที่จะระบุว่าโปรแกรมค้นหาไฟล์ที่จะใช้จาก%run
มายากล แต่ไม่มีอะไรที่จะหยุดคุณจากการกำหนดคำสั่งมายากลของคุณเองว่าสายเป็น%run
ด้วยการค้นหาไฟล์ที่เหมาะสม
ในฐานะแฮ็คที่น่ารังเกียจมากคุณสามารถแทนที่ค่าเริ่มต้นfile_finder
ด้วยตัวคุณเอง:
IPython.core.magics.execution.ExecutionMagics.run.im_func.func_defaults[2] = my_file_finder
ตามจริงแล้วในอัตราที่ IPython API กำลังเปลี่ยนแปลงซึ่งมีแนวโน้มที่จะทำงานต่อไปได้เหมือนกับการกำหนดเวทมนตร์ของคุณเอง
ใน python ไม่มีความแตกต่างระหว่างโมดูลและสคริปต์ คุณสามารถดำเนินการได้ทั้งสคริปต์และโมดูล ไฟล์ต้องอยู่ใน pythonpath AFAIK เนื่องจาก python ต้องสามารถค้นหาไฟล์ที่เป็นปัญหาได้ ถ้า python ถูกเรียกใช้งานจากไดเร็กทอรีไดเร็กทอรีจะถูกเพิ่มลงใน pythonpath โดยอัตโนมัติ
อ้างถึงวิธีที่ดีที่สุดในการเรียกสคริปต์ Python จากสคริปต์ Python อื่นคืออะไร สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมดูลและสคริปต์
นอกจากนี้ยังมี execfile ฟังก์ชันในตัว (ชื่อไฟล์) ที่จะทำสิ่งที่คุณต้องการ
__name__
== ' __main__
':" ในตอนท้าย
สำหรับ Python 3.6.5
import os
os.getcwd()
runfile('testing.py')
runfile()
คำสั่งของipython
? ไม่ได้ผลสำหรับฉัน
import <module>
โดยพื้นฐานแล้วจะเหมือนกับexec(<moduleSource>)
ใน JavaScript หรือ Perl