Variabel lingkungan PYTHONPATH

19

Saya memiliki ini di ~/.profile:

export PYTHONPATH=/home/dev/python-files

Dalam python-filesdirektori, saya punya beberapa proyek yang diklon dari git-hub (flask, curveship dan py-vgdl).

Setiap kali saya mencoba memulai salah satu contoh dalam proyek ini, saya mendapatkan kesalahan yang serupa dengan yang berikut:

$ python ~/python-files/py-vgdl/examples/gridphysics/frogs.py 
Traceback (most recent call last):
    File "/home/dev/python-files/py-vgdl/examples/gridphysics/frogs.py", line 67, in <module>
        from vgdl.core import VGDLParser
ImportError: No module named vgdl.core

Sepertinya saya tidak seharusnya mendapatkan kesalahan ini karena saya telah PYTHONPATHmengatur variabel lingkungan?

Menjalankan interpreter interaktif python:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'
Jerome
sumber

Jawaban:

35

Cobalah menambahkan ke PYTHONPATH alih-alih menimpa sepenuhnya.

export PYTHONPATH=$PYTHONPATH:/home/dev/python-files

Referensi:

Menurut dokumentasi Python pada PYTHONPATH

Menambah jalur pencarian default untuk file modul. [...]

Jalur pencarian default adalah ketergantungan instalasi, tetapi umumnya dimulai dengan prefix/lib/pythonversion(lihat di PYTHONHOMEatas). Itu selalu ditambahkan ke PYTHONPATH.

yang berarti bahwa beberapa nilai ada PYTHONPATHdan jalur pencarian default juga hanya ditambahkan.

Selain itu, posting blog ini ( tautan Archive.org ) juga menjelaskan dengan jelas mengapa Anda perlu menambahkan PYTHONPATHdan tidak menimpanya. Menggulir ke bawah ke bagian - Kasus khusus dan memeriksa jalur pencarian menjelaskan dengan jelas (sayangnya tidak ada URL relatif ke tautan itu sehingga Anda harus menggulir). Meskipun pengguna memberikan contoh pada mac mereka sangat relevan untuk platform apa pun

Nitin Venkatesh
sumber
1
@Garrett Terima kasih :) Diperbarui dengan tautan Archive.org.
Nitin Venkatesh
+1 untuk tautan arsip / stereoplex. Itu menjawab begitu banyak pertanyaan, seharusnya di halaman depan Python docs resmi!
Malik A. Rumi
5

Anda juga dapat melakukan hal berikut:

export PYTHONPATH=$(pwd) **or** export PYTHONPATH=${PWD}

pwd adalah direktori kerja saat ini.

Mrudhvika Damaraju
sumber
Waspadalah, ini akan menimpa PYTHONPATH Anda dalam proses! Jika Anda ingin menambahkan pwd ke PYTHONPATH Anda:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111
4

PYTHONPATHharus menunjuk ke tempat paket dan modul Python Anda, bukan di mana checkout Anda berada. Dengan kata lain, jika Anda melakukannya, ls "$PYTHONPATH"Anda akan melihat *.pyfile ( modul Python ) dan direktori yang berisi __init__.pyfile ( paket Python ).

Jadi, jika Anda ingin bisa import vgdl, Anda PYTHONPATHharus terlihat seperti ini:

PYTHONPATH=/home/dev/python-files/py-vgdl

karena vgdl paketnya ada di dalam py-vgdl, bukan di dalam python-files.

Untuk menambahkan jalur lain juga, Anda dapat menggunakannya :untuk memisahkannya:

PYTHONPATH="/home/dev/python-files/py-vgdl:/home/dev/python-files/something:$PYTHONPATH"

Ini memang akan berhasil, bagaimanapun, untuk kasus seperti itu, menggunakan PYTHONPATHmungkin terlalu rumit. Yang saya rekomendasikan adalah menggunakan virtualenv, yang dibuat dengan sengaja untuk menyederhanakan situasi seperti milik Anda. Yang harus Anda lakukan pada dasarnya adalah:

  1. Buat lingkungan: virtualenv env
  2. 'Aktifkan' itu: source env/bin/activate
  3. Instal paket Anda: ini bisa dilakukan dengan menggunakan pipatau setup.pyskrip paket Anda.
  4. Nikmati.

Saya tidak memberikan banyak informasi karena virtualenv terdokumentasi dengan baik dan jika Anda memerlukan bantuan dengan sesuatu, Anda sebaiknya membuka pertanyaan baru.

Andrea Corbellini
sumber