Apa cara yang benar untuk memperbaiki kesalahan ImportError ini?
Saya memiliki struktur direktori berikut:
/home/bodacydo
/home/bodacydo/work
/home/bodacydo/work/project
/home/bodacydo/work/project/programs
/home/bodacydo/work/project/foo
Dan saya ada di direktori
/home/bodacydo/work/project
Sekarang jika saya mengetik
python ./programs/my_python_program.py
Saya langsung mengerti
ImportError: No module named foo.tasks
The ./programs/my_python_program.py
berisi baris berikut:
from foo.tasks import my_function
Saya tidak mengerti mengapa python tidak akan menemukan ./foo/tasks.py
- itu ada di sana.
Jika saya melakukannya dari shell Python, maka itu berhasil:
python
>>> from foo.tasks import my_function
Itu hanya tidak berfungsi jika saya menyebutnya melalui python ./programs/my_python_program.py
skrip.
__init__.py
hanya menunjukkan bahwa direktori harus diperlakukan sebagai sebuah paket, jika induknya ada di dalamsys.path
atau merupakan sebuah paket.export PYTHONPATH=`pwd`
/home/bodacydo/work
... lihat jawaban iniApakah Anda memiliki file bernama
__init__.py
di direktori foo? Jika tidak maka python tidak akan mengenali foo sebagai paket python.Lihat bagian tentang paket di tutorial python untuk informasi lebih lanjut.
sumber
__init__.py
. Masalahnya kali ini adalah dengan$PYTHONPATH
. Solusi Ignacio berhasil.Berikut ini solusi langkah demi langkah:
Menambahkan script yang disebut
run.py
dalam/home/bodacydo/work/project
dan mengedit seperti ini:(ganti
main()
dengan metode yang setara dimy_python_program
.)/home/bodacydo/work/project
run.py
Penjelasan: Karena python menambahkan ke PYTHONPATH jalur skrip dari mana ia berjalan , berjalan
run.py
akan menambahkan/home/bodacydo/work/project
. Dan voila ,import foo.tasks
akan ditemukan.sumber
Contoh solusi untuk menambahkan perpustakaan ke PYTHONPATH Anda.
Tambahkan baris berikut ke ~ / .bashrc Anda atau jalankan langsung:
Kemudian tautkan pustaka yang Anda butuhkan ke folder ~ / .python, mis
sumber
Sebuah lebih baik memperbaiki daripada pengaturan
PYTHONPATH
adalah dengan menggunakanpython -m module.path
Ini akan diatur dengan benar
sys.path[0]
dan merupakan cara yang lebih andal untuk mengeksekusi modul.Saya memiliki Langgan cepat tentang masalah ini, karena Penjawab lain telah disebutkan alasan untuk ini adalah
python path/to/file.py
menempatkanpath/to
pada awalPYTHONPATH
(sys.path
).sumber
Dalam pikiran saya, saya harus mempertimbangkan bahwa
foo
folder tersebut adalah perpustakaan yang berdiri sendiri. Saya mungkin ingin mempertimbangkan untuk memindahkannya keLib\site-packages
folder dalam instalasi python. Saya mungkin ingin mempertimbangkan untuk menambahkanfoo.pth
file di sana.Saya tahu itu perpustakaan karena
./programs/my_python_program.py
berisi baris berikut:Jadi tidak masalah itu
./programs
folder saudara./foo
. Ini fakta yangmy_python_program.py
dijalankan sebagai skrip seperti ini:sumber
Jika Anda mengalami masalah ini saat menggunakan versi instaled, saat menggunakan
setup.py
, pastikan modul Anda disertakan di dalamnyapackages
sumber