Menjalankan skrip python di dalam ipython

122

Apakah mungkin menjalankan skrip python (bukan modul) dari dalam ipython tanpa menunjukkan jalurnya? Saya mencoba menyetel PYTHONPATH tetapi tampaknya hanya berfungsi untuk modul. Saya ingin mengeksekusi

%run my_script.py

tanpa berada di direktori yang berisi file tersebut.

Tyler Durden
sumber
import <module>pada dasarnya sama seperti exec(<moduleSource>)di JavaScript atau Perl.
Vortico
14
+1 untuk sintaks% run abc.py - mencoba mencarinya
Sid Kshatriya
1
Anda dapat menggunakan jalur:% run ../scripts/my_scripts misalnya
Jose A. Martín
untuk skrip CLI yang dikembangkan dengan pustaka Klik, ini tidak berfungsi untuk saya, saya mendapatkan: IOErrorTraceback (panggilan terakhir terakhir) /home/miguelfg/workspace/projects*********/db_preparation.py di <module > () 1270 1271 if name == " main ": -> 1272 main () 1273 1274 ...
miguelfg

Jawaban:

126

dari dalam direktori "my_script.py" Anda cukup melakukan:

%run ./my_script.py
rakke
sumber
jawaban terbaik untuk kesederhanaan dan keringkasan
Evhz
SyntaxError: invalid syntaxdi sini, di konsol Python . Python 3.5.3 di Debian 9. Namun, berfungsi di IPython.
busuk
1
@rotton itu karena %runadalah perintah ajaib ipython, bukan bagian dari bahasa Python itu sendiri.
HugoMailhot
28

Cara menjalankan skrip di Ipython

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

Itu harus dilakukan

CubeBot88
sumber
16

The %runmagic memiliki parameter file_finderyang menggunakan untuk mendapatkan path lengkap ke file untuk mengeksekusi (lihat di sini ); seperti yang Anda catat, itu hanya terlihat di direktori saat ini, menambahkan ".py" jika perlu.

Ada tampaknya tidak menjadi cara untuk menentukan file finder untuk penggunaan dari para %runsihir, tapi tidak ada yang menghentikan Anda dari mendefinisikan perintah ajaib Anda sendiri yang panggilan menjadi %rundengan file finder yang sesuai.

Sebagai peretasan yang sangat buruk, Anda dapat mengganti default file_finderdengan milik Anda sendiri:

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

Sejujurnya, dengan laju perubahan API IPython, kemungkinan besar akan terus berfungsi seperti halnya mendefinisikan sihir Anda sendiri.

ecatmur.dll
sumber
16

Dalam python tidak ada perbedaan antara modul dan skrip; Anda dapat menjalankan skrip dan modul. File tersebut harus di pythonpath AFAIK karena python harus bisa menemukan file yang dimaksud. Jika python dijalankan dari direktori, maka direktori tersebut secara otomatis ditambahkan ke pythonpath.

Lihat Apa cara terbaik untuk memanggil skrip Python dari skrip Python lain? untuk informasi lebih lanjut tentang modul vs skrip

Ada juga fungsi builtin execfile (nama file) yang akan melakukan apa yang Anda inginkan

Ular dan Kopi
sumber
1
Itu juga yang saya pikirkan. Namun, dalam praktiknya modul dapat diimpor tetapi skrip tidak ditemukan oleh penerjemah kecuali dimulai dari direktori tempatnya.
Tyler Durden
1
Baca docs.python.org/tutorial/modules.html#the-module-search-path untuk info lebih lanjut. Ini merinci di mana harus diletakkan agar python menemukan file, Lebih khusus lagi, banyak modul dapat berfungsi ganda sebagai skrip menggunakan baris "if __name__== ' __main__':" di bagian akhir
Ular dan Kopi
0

untuk Python 3.6.5

import os
os.getcwd()
runfile('testing.py')
Alinafe
sumber
1
Apakah runfile()perintah dari ipython? Tidak berhasil di luar kotak untuk saya.
pengguna3342981