Python - komut satırı modülü çalıştırılırken PYTHONPATH ekle


91

Koşmak istiyorum:

python somescript.py somecommand

Ancak bunu çalıştırdığımda PYTHONPATHbelirli bir dizini eklemem gerekiyor. Bunu sadece ortam değişkenlerime ekleyemem çünkü eklemek istediğim dizin, çalıştırdığım projeye göre değişir. PYTHONPATHBir komut dosyası çalıştırırken değiştirmenin bir yolu var mı ? Not: Bir PYTHONPATHdeğişkenim bile yok , bu yüzden ona eklemek veya bu komut dosyasını çalıştırırken onu geçersiz kılmak konusunda endişelenmeme gerek yok.

Yanıtlar:


152

Mac / Linux için;

PYTHONPATH=/foo/bar/baz python somescript.py somecommand

Windows için bir sarmalayıcı kurun pythonpath.bat;

@ECHO OFF
setlocal
set PYTHONPATH=%1
python %2 %3
endlocal

ve pythonpath.batkomut dosyası dosyasını şöyle çağırın ;

pythonpath.bat /foo/bar/baz somescript.py somecommand

@ İsmail - teşekkürler. Ancak, komut istemimden bir komut dosyası çalıştırırken bunu nasıl yapabilirim? Python çalıştırmıyorum, bir şeyler içe aktarmıyorum ve manuel olarak çalıştırmıyorum.
orokusaki

Mac / Linux'ta yaparsınızPYTHONPATH=/foo/bar python somescript.py somecommand
ismail

Denedim python -c"import sys;sys.path.append('/my/dir')"ve sonra python myscript.py mycommand, ama belli ki ilk tercüman oturumundan sonraki yolu diğeriyle paylaşmıyor. Ah, şimdi bir sonraki yorumunuzu gördüm, şimdi deniyorum ... WinXP üzerinde çalışmadı.
orokusaki

1
unsetWindows'ta ortam değişkeni komutu yoktur . Bunun yerine baştan setlocalsonra bir ekleyin echo offve ardından endlocal.bat betiği sona erdiğinde örtük bir durum oluşacaktır (ve PYTHONPATHönceki değerine geri yüklenecektir).
martineau

5
Windows'ta var olan yolu eklemekPYTHONPATH istiyorsanız, kullanmak isteyebilirsiniz set PYTHONPATH=%PYTHONPATH%;%1.
martineau

49
 import sys
 sys.path.append('your certain directory')

Temel olarak sys.path, python modülleri için tüm arama yollarını içeren bir listedir. Tercüman tarafından başlatılır. PYTHONPATH içeriği otomatik olarak bu listenin sonuna eklenir.


10
veya sys.path.insert (0, '/ bir / dizin') yolunuzun önüne koymak için. Bu, materyalinizin halihazırda pythonpath üzerinde olabilecek diğer şeyleri geçersiz kılmasına izin verir.
sienkiew

Bu cevabı, pydev-eclipse IDE dışında en sinsi çalıştırmak için kullandım.
LAL

sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')Windows'ta örnek.
Bob Stein

10

Komutu POSIX uyumlu bir kabuktan çalıştırıyorsanız, bashortam değişkenini şu şekilde ayarlayabilirsiniz:

PYTHONPATH="/path/to" python somescript.py somecommand

Hepsi tek satırdaysa, PYTHONPATH ortam değeri yalnızca bu tek komut için geçerlidir.

$ echo $PYTHONPATH

$ python -c 'import sys;print("/tmp/pydir" in sys.path)'
False
$ PYTHONPATH=/tmp/pydir python -c 'import sys;print("/tmp/pydir" in sys.path)'
True
$ echo $PYTHONPATH

Tam aradığım şey, çok teşekkürler. Nedense koşmak python -c "import sys; sys.path.insert(0,'my/path'); import mymodule"işe yaramadı.
Luke Davis

0

Bunu komut dosyanız içinde bir işlevi yürütmek için deneyebilirsiniz

python -c "import sys; sys.path.append('/your/script/path'); import yourscript; yourscript.yourfunction()"

-1

Bu pencereler içindir:

Örneğin, masaüstümde "mygrapher" adlı bir klasörüm var. İçinde, ana dosyam olan "grapherMain.py" nin ihtiyaç duyduğu Python dosyalarını içeren "hesaplama" ve "grafik oluşturma" adlı klasörler var. Ayrıca, "grapherMain.py", "grafik oluşturma" içinde saklanır. Dosyaları taşımadan her şeyi çalıştırmak için bir toplu komut dosyası oluşturabilirim. Bu toplu iş dosyasını "rungraph.bat" olarak adlandıralım.

@ECHO OFF
setlocal
set PYTHONPATH=%cd%\grapher;%cd%\calculation
python %cd%\grapher\grapherMain.py
endlocal

Bu komut dosyası "mygrapher" da bulunur. İşleri çalıştırmak için komut istemime giriyordum ve sonra şunu yapardım:

>cd Desktop\mygrapher (this navigates into the "mygrapher" folder)
>rungraph.bat (this executes the batch file)

6
ve bunun @ İsmail'den 'cartman' cevabından farkı nedir?
Alex Okrushko
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.