İpython içinde python betiğini çalıştırma


122

Bir python betiğini (modül değil) ipython'un içinden yolunu belirtmeden çalıştırmak mümkün müdür? PYTHONPATH'ı kurmaya çalıştım ama sadece modüller için çalışıyor gibi görünüyor. Yürütmek isterim

%run my_script.py

dosyayı içeren dizinde olmadan.


import <module>esasen exec(<moduleSource>)JavaScript veya Perl ile aynıdır .
Vortico

14
% Run abc.py sözdizimi için +1 - bunu aramaya çalışıyordu
Sid Kshatriya

1
Şu yolu kullanabilirsiniz:% run ../scripts/my_scripts, örneğin
Jose A. Martín

Click kitaplığıyla geliştirilen CLI komut dosyaları için bana çalışmıyor: IOErrorTraceback (en son çağrı son) /home/miguelfg/workspace/projects*********/db_preparation.py <module > () 1270 1271 if name == " main ": -> 1272 main () 1273 1274 ...
miguelfg

Yanıtlar:


126

"my_script.py" dizininden şunları yapabilirsiniz:

%run ./my_script.py

basitlik ve
özlülük

SyntaxError: invalid syntaxBurada, üzerinde Python konsoluna . Debian 9 üzerinde Python 3.5.3. Ancak, IPython üzerinde çalışır.
rotton

1
@rotton %run, Python dilinin bir parçası değil, bir ipython sihirli komutudur.
HugoMailhot

28

Ipython'da bir komut dosyası nasıl çalıştırılır

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

Bunu yapmalı


16

%runSihirli bir parametresi vardır file_finder(bkz yürütmek için dosyanın tam yolunu almak için kullandığı burada ); not ettiğiniz gibi, sadece mevcut dizine bakar ve gerekirse ".py" ekler.

Kullanımına hangi dosya bulucu belirtmek için bir yol olarak görünmüyor dan%run büyü, ama kendi sihirli komutunu tanımlayan sizi durdurmak için birşey olmadığını içine aramaları %runuygun bir dosya bulucu ile.

Bir itibariyle çok kötü hack, varsayılan geçersiz kılmak olabilir file_finderkendinizinkilerle:

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

Dürüst olmak gerekirse, IPython API'sinin değişme hızında, kendi sihrinizi tanımlamak kadar çalışmaya devam etme olasılığı yüksektir.


16

Python'da modüller ve betikler arasında fark yoktur; Hem komut dosyalarını hem de modülleri çalıştırabilirsiniz. Dosya pythonpath AFAIK üzerinde olmalıdır çünkü python söz konusu dosyayı bulabilmelidir. Python bir dizinden çalıştırılırsa, dizin otomatik olarak python yoluna eklenir.

Bakın başka Python komut gelen bir Python komut dosyası çağırmak için en iyi yolu nedir? modüller ve komut dosyaları hakkında daha fazla bilgi için

İstediğinizi yapacak yerleşik bir execfile (dosya adı) işlevi de vardır.


1
Ben de öyle düşündüm. Bununla birlikte, pratikte modüller içe aktarılabilir ancak betikler, ait oldukları dizinden başlatılmadıkça yorumlayıcı tarafından bulunmaz.
Tyler Durden

1
Daha fazla bilgi için docs.python.org/tutorial/modules.html#the-module-search-path okuyun . Python'un dosyayı bulması için nereye yerleştirilmesi gerektiğini ayrıntılarıyla anlatır, Daha spesifik olarak, birçok modül sonunda "if __name__== ' __main__':" satırını kullanarak komut dosyası olarak ikiye katlanabilir
Yılanlar ve Kahve

0

Python 3.6.5 için

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

1
runfile()bir komut ipython? Benim için kullanıma hazır değil.
user3342981
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.