Jawaban:
Bukan itu cara PYTHONPATH bekerja; PYTHONPATH memperlakukan jalur pencariannya secara berbeda dari PATH shell. Katakanlah saya melakukan ini:
$ mkdir /home/jsmith/python
$ cd /home/jsmith/python
$ touch a.py b.py
Ini akan berfungsi, dengan Python ( sys.path
akan termasuk direktori saat ini):
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> quit()
Namun, subdirektori diperlakukan sebagai paket bila __init__.py
ada dalam direktori, dan diabaikan oleh PYTHONPATH jika tidak:
$ mkdir /home/jsmith/python/pkg
$ cd /home/jsmith/python/pkg
$ touch __init__.py c.py d.py
$ cd /
$ PYTHONPATH=/home/jsmith/python python2.6
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
>>> import a, b # Works
>>> import c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named c
Untuk mendapatkan sesuatu di subdirektori itu, ini akan berhasil:
>>> from pkg import c # Works
>>> import pkg.c # Works
Untuk menggulung solusi di mana setiap subdirektori dalam PYTHONPATH Anda ditambahkan, Anda perlu menambahkan setiap folder secara eksplisit ke PYTHONPATH atau secara sys.path
terprogram. Perilaku ini disengaja, dan tidak berperilaku seperti shell PATH. Mengingat dukungan penerjemah untuk paket dalam hal ini, tentunya ada cara yang lebih baik untuk mencapai apa yang Anda cari?
Dimungkinkan untuk menambahkan subdirektori dari sebuah direktori ke variabel PYTHONPATH Anda menggunakan shell, tentu saja. Saat ini saya menggunakan sesuatu yang mirip dengan yang berikut ini di .bashrc saya:
export PYTHONPATH="$(find $HOME/ -maxdepth 2 -type d | sed '/\/\./d' | tr '\n' ':' | sed 's/:$//')"
Ini akan mencakup semua subdirektori dari folder pengguna Anda hingga kedalaman 2 di pohon. Perintah find menempatkan direktori ('-type d'), dan perintah sed dan tr berikut memformat output dengan cara yang biasa dari variabel PATH.
Meninggalkan '-maxdepth 2' akan mencakup semua subdirektori dari folder beranda Anda, yang mungkin cukup banyak untuk dicari. Mungkin ini hanya boleh dilakukan di direktori $ HOME / repositori / python-stuff Anda.