Dalam skrip Python, bagaimana cara mengatur PYTHONPATH?

115

Saya tahu cara mengaturnya di / etc / profile saya dan di variabel lingkungan saya.

Tetapi bagaimana jika saya ingin mengaturnya selama skrip? Apakah import os, sys? Bagaimana saya melakukannya?

TIMEX
sumber

Jawaban:

192

Anda tidak mengatur PYTHONPATH, Anda menambahkan entri ke sys.path. Ini adalah daftar direktori yang harus dicari untuk paket Python, jadi Anda bisa menambahkan direktori Anda ke daftar itu.

sys.path.append('/path/to/whatever')

Bahkan, sys.pathdiinisialisasi dengan memisahkan nilai PYTHONPATHkarakter pemisah jalur ( :pada sistem mirip Linux,; pada Windows).

Anda juga dapat menambahkan direktori menggunakan site.addsitedir, dan metode itu juga akan memperhitungkan .pthfile yang ada di dalam direktori yang Anda berikan. (Itu tidak akan terjadi pada direktori yang Anda tentukan PYTHONPATH.)

David Z
sumber
11
Sudah bertahun-tahun sejak jawaban ini diposting, tetapi saya masih ingin menambahkan bahwa jika Anda ingin memastikan bahwa Python memeriksa direktori baru sebelum yang lain saat mengimpor, Anda harus meletakkan direktori baru terlebih dahulu dalam daftar, karena masuk sys.path.insert(0, '/path/to/whatever').
wecsam
39

Anda bisa mendapatkan dan mengatur variabel lingkungan melalui os.environ:

import os
user_home = os.environ["HOME"]

os.environ["PYTHONPATH"] = "..."

Tetapi karena penerjemah Anda sudah berjalan, ini tidak akan berpengaruh. Anda lebih baik menggunakan

import sys
sys.path.append("...")

yang merupakan larik yang PYTHONPATHakan Anda ubah menjadi saat memulai penerjemah.

miku
sumber
18

Jika Anda meletakkan sys.path.append('dir/to/path')tanpa centang, itu sudah ditambahkan, Anda bisa membuat daftar panjang sys.path. Untuk itu, saya merekomendasikan ini:

import sys
import os # if you want this directory

try:
    sys.path.index('/dir/path') # Or os.getcwd() for this directory
except ValueError:
    sys.path.append('/dir/path') # Or os.getcwd() for this directory
Francisco Manuel Garca Botella
sumber
2
Bagus. Sangat Pythonic.
PartialOrder
1
Bagaimana cara mengosongkan PythonPath? Saya tidak ingin menambahkan. Saya ingin mengosongkannya dan memasukkan apa yang hanya saya inginkan di dalamnya. Apakah ada cara untuk melakukan ini?
Schütze
Apakah Anda mencoba menginisialisasi ulang dengan memanggil sys.path .__ init __ ()? Ini harus mengosongkan jalur python. Semoga ini membantu.
Thayz
@ francisco-manuel-garca-botella Menjawab pertanyaan lama sangat disambut di situs ini! Tidak ada yang perlu disesali.
pengguna7610
Saya tidak setuju bahwa ini pythonic, dan saya akan menyarankan bahwa ini bukan pendekatan pemrograman yang baik. Penanganan pengecualian sangat mahal ketika pengecualian terjadi, jadi Anda tidak ingin menggunakannya untuk mengganti pernyataan "jika" di mana sangat mungkin Anda akan menggunakan yang lain. Sederhana jika 'mypath' di sys.path ... else ... akan menjadi saran saya.
markgalassi
6

PYTHONPATH berakhir di sys.path , yang dapat Anda modifikasi saat runtime.

import sys
sys.path += ["whatever"]
unbeli
sumber
Apakah ada alasan untuk memilih jawaban ini daripada jawaban dari @DavidZ?
Dror
Jika tidak ada yang lain, itu kurang bertele-tele.
tripleee
-1

Anda dapat mengatur PYTHONPATH, dengan os.environ['PATHPYTHON']=/some/path, kemudian Anda perlu memanggil os.system('python')untuk memulai ulang shell python untuk membuat jalur yang baru ditambahkan efektif.

tesla1060
sumber
1
os.system()tidak "memulai ulang shell python", ini memulai instance Python interaktif baru. Ketika Anda kembali dari itu, Anda kembali ke skrip panggilan.
tripleee
-2

Saya linux ini juga berfungsi:

import sys
sys.path.extend(["/path/to/dotpy/file/"])
lashgar
sumber