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.
import <module>
pada dasarnya sama sepertiexec(<moduleSource>)
di JavaScript atau Perl.Jawaban:
dari dalam direktori "my_script.py" Anda cukup melakukan:
sumber
SyntaxError: invalid syntax
di sini, di konsol Python . Python 3.5.3 di Debian 9. Namun, berfungsi di IPython.%run
adalah perintah ajaib ipython, bukan bagian dari bahasa Python itu sendiri.Cara menjalankan skrip di Ipython
Itu harus dilakukan
sumber
The
%run
magic memiliki parameterfile_finder
yang 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
%run
sihir, tapi tidak ada yang menghentikan Anda dari mendefinisikan perintah ajaib Anda sendiri yang panggilan menjadi%run
dengan file finder yang sesuai.Sebagai peretasan yang sangat buruk, Anda dapat mengganti default
file_finder
dengan milik Anda sendiri:Sejujurnya, dengan laju perubahan API IPython, kemungkinan besar akan terus berfungsi seperti halnya mendefinisikan sihir Anda sendiri.
sumber
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
sumber
__name__
== '__main__
':" di bagian akhiruntuk Python 3.6.5
sumber
runfile()
perintah dariipython
? Tidak berhasil di luar kotak untuk saya.