เรียกใช้สคริปต์ python ภายใน ipython


122

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

%run my_script.py

โดยไม่ต้องอยู่ในไดเร็กทอรีที่มีไฟล์


import <module>โดยพื้นฐานแล้วจะเหมือนกับexec(<moduleSource>)ใน JavaScript หรือ Perl
Vortico

14
+1 สำหรับไวยากรณ์% เรียกใช้ abc.py - พยายามค้นหาสิ่งนั้น
Sid Kshatriya

1
คุณสามารถใช้เส้นทาง:% run ../scripts/my_scripts เช่น
Jose A. Martín

สำหรับสคริปต์ CLI ที่พัฒนาด้วยไลบรารี Click มันไม่ได้ผลสำหรับฉันฉันได้รับ: IOErrorTraceback (การโทรล่าสุดล่าสุด) /home/miguelfg/workspace/projects*********/db_preparation.py ใน <module > () 1270 1271 if name == " main ": -> 1272 main () 1273 1274 ...
miguelfg

คำตอบ:


126

จากภายในไดเรกทอรีของ "my_script.py" คุณสามารถทำได้:

%run ./my_script.py

คำตอบที่ดีที่สุดสำหรับความเรียบง่ายและกระชับ
Evhz

SyntaxError: invalid syntaxที่นี่ในหลามคอนโซล Python 3.5.3 บน Debian 9 อย่างไรก็ตามทำงานบน IPython
rotton

1
@rotton นั่นเป็นเพราะ%runเป็นคำสั่งเวทย์มนตร์ ipython ไม่ใช่ส่วนหนึ่งของภาษา Python เอง
HugoMailhot

28

วิธีเรียกใช้สคริปต์ใน Ipython

import os
filepath='C:\\Users\\User\\FolderWithPythonScript' 
os.chdir(filepath)
%run pyFileInThatFilePath.py

ที่ควรทำ


16

%runมายากลมีพารามิเตอร์file_finderที่จะใช้เพื่อให้ได้เส้นทางแบบเต็มไปยังไฟล์ที่จะรัน (ดูที่นี่ ); ดังที่คุณทราบมันจะดูในไดเรกทอรีปัจจุบันต่อท้าย ".py" หากจำเป็น

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

ในฐานะแฮ็คที่น่ารังเกียจมากคุณสามารถแทนที่ค่าเริ่มต้นfile_finderด้วยตัวคุณเอง:

IPython.core.magics.execution.ExecutionMagics.run.im_func.func_defaults[2] = my_file_finder

ตามจริงแล้วในอัตราที่ IPython API กำลังเปลี่ยนแปลงซึ่งมีแนวโน้มที่จะทำงานต่อไปได้เหมือนกับการกำหนดเวทมนตร์ของคุณเอง


16

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

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

นอกจากนี้ยังมี execfile ฟังก์ชันในตัว (ชื่อไฟล์) ที่จะทำสิ่งที่คุณต้องการ


1
นั่นคือสิ่งที่ฉันคิดเช่นกัน อย่างไรก็ตามในทางปฏิบัติโมดูลสามารถนำเข้าได้ แต่ล่ามจะไม่พบสคริปต์เว้นแต่จะเริ่มต้นจากไดเร็กทอรีที่เป็นของ
Tyler Durden

1
อ่านdocs.python.org/tutorial/modules.html#the-module-search-pathสำหรับข้อมูลเพิ่มเติม มีรายละเอียดว่าจะต้องวาง python ไว้ที่ใดเพื่อค้นหาไฟล์โดยเฉพาะอย่างยิ่งโมดูลจำนวนมากสามารถเพิ่มเป็นสองเท่าของสคริปต์โดยใช้บรรทัด"if __name__== ' __main__':" ในตอนท้าย
Snakes and Coffee

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