Chạy tập lệnh python bên trong ipython


122

Có thể chạy một tập lệnh python (không phải mô-đun) từ bên trong ipython mà không chỉ ra đường dẫn của nó không? Tôi đã cố gắng đặt PYTHONPATH nhưng có vẻ như nó chỉ hoạt động cho các mô-đun. Tôi muốn thực hiện

%run my_script.py

mà không có trong thư mục chứa tệp.


import <module>về cơ bản giống như exec(<moduleSource>)trong JavaScript hoặc Perl.
Vortico

14
+1 cho cú pháp% run abc.py - đang cố gắng tìm kiếm điều đó
Sid Kshatriya

1
bạn có thể sử dụng đường dẫn:% run ../scripts/my_scripts chẳng hạn
Jose A. Martín

đối với các tập lệnh CLI được phát triển bằng thư viện Click, nó không hoạt động với tôi, tôi nhận được: IOErrorTraceback (cuộc gọi gần đây nhất) /home/miguelfg/workspace/projects*********/db_preparation.py trong <mô-đun > () 1270 1271 if name == " main ": -> 1272 main () 1273 1274 ...
miguelfg

Câu trả lời:


126

từ trong thư mục của "my_script.py", bạn có thể chỉ cần thực hiện:

%run ./my_script.py

câu trả lời tốt nhất cho sự đơn giản và ngắn gọn
Evhz

SyntaxError: invalid syntaxtại đây, trên bảng điều khiển Python . Python 3.5.3 trên Debian 9. Tuy nhiên, hoạt động trên IPython.
rotton

1
@rotton đó là vì %runlà một lệnh ma thuật ipython, không phải là một phần của chính ngôn ngữ Python.
HugoMailhot

28

Cách chạy script trong Ipython

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

Nên làm vậy


16

Các %runphép thuật có một tham số file_findermà nó sử dụng để có được đầy đủ đường dẫn đến tập tin thực thi (xem ở đây ); như bạn lưu ý, nó chỉ tìm trong thư mục hiện tại, thêm ".py" nếu cần.

Có vẻ như không phải là một cách để xác định các tập tin công cụ tìm đến việc sử dụng từ các %runphép thuật, nhưng không có gì để ngăn chặn bạn từ việc xác định lệnh kỳ diệu của riêng bạn là các cuộc gọi vào %runvới một công cụ tìm tập tin thích hợp.

Là một vụ hack rất khó chịu, bạn có thể ghi đè cài đặt mặc định file_finderbằng của riêng mình:

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

Thành thật mà nói, với tốc độ API IPython đang thay đổi, có khả năng sẽ tiếp tục hoạt động như việc xác định phép thuật của riêng bạn.


16

Trong python không có sự khác biệt giữa mô-đun và tập lệnh; Bạn có thể thực thi cả tập lệnh và mô-đun. Tệp phải nằm trên pythonpath AFAIK vì python phải có thể tìm thấy tệp được đề cập. Nếu python được thực thi từ một thư mục, thì thư mục đó sẽ tự động được thêm vào đường dẫn python.

Tham khảo Cách tốt nhất để gọi một tập lệnh Python từ một tập lệnh Python khác là gì? để biết thêm thông tin về mô-đun so với tập lệnh

Ngoài ra còn có một tệp thực thi chức năng nội trang (tên tệp) sẽ làm những gì bạn muốn


1
Đó cũng là những gì tôi đã nghĩ. Tuy nhiên, trong thực tế, các mô-đun có thể được nhập nhưng trình thông dịch không tìm thấy các tập lệnh trừ khi bắt đầu từ thư mục mà chúng thuộc về.
Tyler Durden

1
Đọc docs.python.org/tutorial/modules.html#the-module-search-path để biết thêm thông tin. Nó chi tiết mà nó phải được đặt cho python để tìm các tập tin, Cụ thể hơn, nhiều mô-đun có thể tăng gấp đôi như kịch bản sử dụng "nếu __name__== ' __main__':" dòng ở cuối
Snakes and Coffee

0

cho Python 3.6.5

import os
os.getcwd()
runfile('testing.py')

1
runfile()một lệnh của ipython? Không hoạt động ngoài hộp đối với tôi.
user3342981 09/07/19
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.