Python - tambahkan PYTHONPATH selama menjalankan modul baris perintah


90

Saya ingin berlari:

python somescript.py somecommand

Tapi, ketika saya menjalankan ini, saya perlu PYTHONPATHmenyertakan direktori tertentu. Saya tidak bisa begitu saja menambahkannya ke variabel lingkungan saya karena direktori yang ingin saya tambahkan berubah berdasarkan proyek apa yang saya jalankan. Apakah ada cara untuk mengubah PYTHONPATHsaat menjalankan skrip? Catatan: Saya bahkan tidak memiliki PYTHONPATHvariabel, jadi saya tidak perlu khawatir tentang menambahkannya vs menimpanya selama menjalankan skrip ini.

Jawaban:


151

Untuk Mac / Linux;

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

Untuk Windows, siapkan pembungkus pythonpath.bat;

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

dan panggil pythonpath.batfile script seperti;

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

@ İsmail - terima kasih. Namun, bagaimana saya bisa melakukannya saat menjalankan skrip dari command prompt saya? Saya tidak menjalankan Python, mengimpor barang, dan menjalankannya secara manual.
orokusaki

Di Mac / Linux Anda akan melakukannyaPYTHONPATH=/foo/bar python somescript.py somecommand
ismail

Saya mencoba python -c"import sys;sys.path.append('/my/dir')"dan kemudian python myscript.py mycommand, tetapi jelas tidak membagikan jalur dari sesi penerjemah pertama dengan sesi berikutnya. Ah, baru saja melihat komentar Anda berikutnya, mencoba sekarang ... Tidak berfungsi di WinXP.
orokusaki

1
Tidak ada unsetperintah variabel lingkungan di Windows. Sebagai gantinya tambahkan setlocalsetelah inisial echo offdan kemudian implisit endlocalakan terjadi ketika skrip .bat berakhir (dan PYTHONPATHakan dikembalikan ke nilai sebelumnya).
martineau

5
Pada Windows jika Anda ingin menambahkan jalur yang ada PYTHONPATH, Anda mungkin ingin menggunakan set PYTHONPATH=%PYTHONPATH%;%1.
martineau

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

Pada dasarnya sys.path adalah daftar dengan semua jalur pencarian untuk modul python. Ini diinisialisasi oleh penerjemah. Konten PYTHONPATH secara otomatis ditambahkan ke akhir daftar itu.


10
atau sys.path.insert (0, '/ some / directory') untuk meletakkannya di depan jalur Anda. Ini memungkinkan materi Anda menimpa hal-hal lain yang mungkin sudah ada di pythonpath.
sienkiew

Saya menggunakan jawaban ini untuk menjalankan uninttest di luar pydev-eclipse IDE.
LAL

sys.path.append(r'D:\PyCharmProjects\cheese_shoppe')contoh di Windows.
Bob Stein

10

Jika Anda menjalankan perintah dari shell yang sesuai dengan POSIX, seperti bash, Anda dapat menyetel variabel lingkungan seperti ini:

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

Jika semuanya dalam satu baris, nilai lingkungan PYTHONPATH hanya berlaku untuk satu perintah itu.

$ 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

Hanya apa yang saya cari, terima kasih banyak. Untuk beberapa alasan, lari python -c "import sys; sys.path.insert(0,'my/path'); import mymodule"tidak berhasil.
Luke Davis

0

Anda dapat mencoba ini untuk menjalankan fungsi di dalam skrip Anda

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

-1

Ini untuk windows:

Misalnya, saya memiliki folder bernama "mygrapher" di desktop saya. Di dalamnya, ada folder bernama "kalkulasi" dan "grafik" yang berisi file Python yang dibutuhkan oleh file utama saya "grapherMain.py". Selain itu, "grapherMain.py" disimpan di "grafik". Untuk menjalankan semuanya tanpa memindahkan file, saya dapat membuat skrip batch. Mari kita sebut file batch ini "rungraph.bat".

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

Skrip ini terletak di "mygrapher". Untuk menjalankan sesuatu, saya akan masuk ke command prompt saya, lalu lakukan:

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

6
dan apa bedanya dengan jawaban @ İsmail 'cartman' Dönmez?
Alex Okrushko
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.