Saya tidak bisa seumur hidup saya mendapatkan impor relatif python untuk bekerja. Saya telah membuat contoh sederhana di mana itu tidak berfungsi:
Struktur direktori adalah:
/__init__.py
/start.py
/parent.py
/sub/__init__.py
/sub/relative.py
/start.py
hanya mengandung: import sub.relative
/sub/relative.py
hanya mengandung from .. import parent
Semua file lainnya kosong.
Saat menjalankan yang berikut di baris perintah:
$ cd /
$ python start.py
Saya mendapat:
Traceback (most recent call last):
File "start.py", line 1, in <module>
import sub.relative
File "/home/cvondrick/sandbox/sub/relative.py", line 1, in <module>
from .. import parent
ValueError: Attempted relative import beyond toplevel package
Saya menggunakan Python 2.6. Mengapa demikian? Bagaimana cara membuat contoh kotak pasir ini berfungsi?
Jika Anda akan menelepon
relative.py
langsung dan jika Anda benar-benar ingin mengimpor dari modul tingkat atas, Anda harus menambahkannya secara eksplisit kesys.path
daftar.Inilah cara kerjanya:
Jika menurut Anda hal di atas dapat menyebabkan semacam ketidakkonsistenan, Anda dapat menggunakan ini sebagai gantinya:
sys.path[0]
merujuk ke jalur tempat titik masuk itu berlari.sumber
Mengeceknya di python3:
Contoh 1:
Jika kita menjalankannya seperti ini (hanya untuk memastikan PYTHONPATH kosong):
Keluaran:
Jika kami mengubah impor
sub/relative.py
Jika kita jalankan seperti ini:
Keluaran:
Contoh2:
Jalankan seperti:
Keluaran:
Jika kami mengubah impor di
sub/start.py
:Jalankan seperti:
Keluaran:
Jalankan seperti:
Keluaran:
Juga lebih baik menggunakan impor dari folder root, yaitu:
Jalankan seperti:
Keluaran:
sumber