Lebih
Python kesalahan "ImportError: No module bernama"
Python terinstal di direktori lokal.
Saya pohon direktori terlihat seperti ini:
(local directory)/site-packages/toolkit/interface.py
Kode saya di sini:
(local directory)/site-packages/toolkit/examples/mountain.py
Untuk menjalankan contoh, saya menulis python mountain.py
, dan dalam kode saya:
from toolkit.interface import interface
Dan saya mendapatkan error:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
Saya sudah diperiksa sys.jalan
dan di sana aku memiliki direktori /site-packages
. Juga, saya memiliki file __init__.py.bin
di toolkit folder untuk menunjukkan untuk Python yang ini adalah paket. Saya juga memiliki __init__.py.bin
pada contoh direktori.
Aku tidak tahu mengapa Python tidak dapat menemukan berkas yang ketika itu berada di sys.jalan
. Ada ide? Hal itu dapat masalah izin? Apakah saya perlu beberapa eksekusi izin?
409
26
Berdasarkan komentar anda untuk orip's post, saya kira ini adalah apa yang terjadi:
__init__.py
pada windows.__init__.py
(sekarang disebut__init__.py.bin
) berarti python doesn't memahami toolkit sebagai sebuah paket.__init__.py
di direktori yang sesuai dan semuanya bekerja... ?Tidak
memiliki
__init__.py
?Untuk membuat impor berjalan anda melalui direktori yang setiap direktori harus memiliki
__init__.py
file.Aku berlari ke sesuatu yang sangat mirip ketika saya melakukan latihan ini di LPTHW; aku tidak pernah bisa mendapatkan Python untuk mengakui bahwa saya punya file dalam direktori saya menelepon dari. Tapi saya bisa mendapatkannya untuk bekerja di akhir. Apa yang saya lakukan, dan apa yang saya sarankan, untuk coba ini:
(CATATAN: Dari awal anda posting, saya mengasumsikan anda menggunakan sebuah *NIX berbasis mesin dan menjalankan hal-hal dari baris perintah, sehingga saran ini dirancang untuk itu. Sejak saya menjalankan Ubuntu, ini adalah apa yang saya lakukan)
Change directory (cd) ke direktori di atas direktori di mana file anda. Dalam hal ini, anda're berusaha untuk menjalankan
mountain.py
file, dan mencoba untuk memanggiltoolkit.interface.py
modul, yang berada dalam direktori terpisah. Dalam hal ini, anda akan pergi ke direktori yang berisi jalan untuk kedua file tersebut (atau dengan kata lain, yang paling dekat direktori yang jalan dari kedua file tersebut berbagi). Yang dalam hal ini adalahtoolkit
direktori.Ketika anda berada di
tookit
direktori, masukkan baris kode pada baris perintah:ekspor PYTHONPATH=.
Ini set anda PYTHONPATH untuk ".", yang pada dasarnya berarti bahwa anda PYTHONPATH sekarang akan terlihat untuk memanggil file-file di dalam direktori anda saat ini, (dan lebih ke titik, di sub-direktori cabang direktori tempat anda berada. Jadi itu doesn't hanya terlihat di direktori anda saat ini, tetapi dalam semua direktori yang ada dalam **** direktori anda saat ini).
toolkit
direktori). Python harus sekarang menemukan dan memuat modul yang anda tentukan.Semoga ini bisa membantu. Saya cukup frustrasi dengan diri saya sendiri.
Pada *nix, juga pastikan bahwa PYTHONPATH dikonfigurasi dengan benar, terutama yang memiliki format ini:
(Pikiran
.:
di awal, sehingga dapat mencari pada direktori saat ini, juga.)Hal ini juga dapat di lokasi lain, tergantung pada versi:
Saya memecahkan masalah saya sendiri, dan saya akan menulis sebuah ringkasan dari hal-hal yang salah dan solusinya:
File harus sama persis disebut
__init__.py
. Jika ekstensi yang berbeda seperti dalam kasus saya.py.bin
kemudian Python tidak bisa bergerak melalui direktori dan kemudian hal itu tidak dapat menemukan modul. Untuk mengedit file yang anda butuhkan untuk menggunakan Linux editor, seperti vi atau nano. Jika anda menggunakan Windows editor ini akan menulis beberapa karakter tersembunyi.Masalah lain yang mempengaruhi itu yang aku punya yang lain Python versi diinstal oleh akar, sehingga jika seseorang bekerja dengan lokal instalasi python, pastikan bahwa instalasi Python yang menjalankan program-program lokal Python. Untuk memeriksa ini, hanya melakukan
yang python
, dan melihat jika eksekusi adalah salah satu yang ada di direktori lokal anda. Jika tidak, mengubah jalur, tetapi pastikan bahwa setempat Python direktori sebelum dari yang lain Python.solusi yang mudah adalah dengan menginstal modul menggunakan
python -m pip menginstal <perpustakaan-nama>
bukanpip menginstal <perpustakaan-nama>
anda dapat menggunakan sudo dalam kasus admin pembatasanUntuk menandai sebuah direktori sebagai paket yang anda butuhkan dalam sebuah file bernama
__init__.py
, hal ini membantu?Menggunakan
PyCharm
(bagian dari JetBrains suite) yang anda butuhkan untuk menentukan direktori skrip sebagai Sumber:Klik kanan > Markus Direktori sebagai > Sumber Akar
Yup. Anda perlu direktori berisi
__init__.py
file, yaitu file yang akan menginisialisasi paket. Di sini, melihat-lihat di ini.misalnya: /etc/lingkungan
PYTHONPATH=$PYTHONPATH:/opt/folder1:/opt/folder2
/opt/folder1/foo
/opt/folder2/foo
Dan, jika anda mencoba untuk mengimpor file foo, python tidak akan tahu yang mana yang anda inginkan.
dari foo impor ... >>> importerror: no module bernama foo
Anda sedang membaca jawaban ini mengatakan bahwa anda
__init__.py
di tempat yang tepat, anda telah menginstal semua dependensi dan anda masih mendapatkanImportError
.Saya menghadapi masalah yang sama kecuali bahwa program akan berjalan dengan baik ketika berlari menggunakan PyCharm tapi kesalahan di atas saat saya akan jalankan dari terminal. Setelah menggali lebih dalam, saya menemukan bahwa
PYTHONPATH
didn't memiliki entri untuk proyek direktori. Jadi, saya setPYTHONPATH
per Import pernyataan bekerja pada PyCharm tapi tidak dari terminal:Ada's cara lain untuk melakukan ini dengan menggunakan
sys.jalan
sebagai:Anda dapat menggunakan menyisipkan/menambahkan berdasarkan urutan di mana anda ingin proyek anda yang akan dicari.
Saya dua sen:
Meludah:
Ini bingung neraka keluar dari saya - pergi melalui posting dan posting menyarankan jelek syspath hacks (seperti yang anda lihat saya
__init__.py
semua ada di sana). Nah ternyata yang game/oblivion.py dan permainan/oblivion membingungkan python yang meludahkan agak membantu "Tidak ada modul yang bernama RecordGroups". I'a akan tertarik pada solusi dan/atau link ini mendokumentasikan (nama yang sama) perilaku -> EDIT (2017.01.24) - melihat-lihat di Bagaimana Jika saya Memiliki Modul dan Paket Dengan Nama Yang Sama? Menariknya biasanya packages didahulukan tapi rupanya kita launcher melanggar ini.EDIT (2015.01.17): saya tidak menyebutkan kita menggunakan peluncur kustom membedah di sini.
Bagi saya, itu adalah sesuatu yang benar-benar bodoh. Saya menginstal perpustakaan menggunakan
pip3 install
tapi menjalankan program saya sebagaipython program.py
sebagai lawanpython3 program.py
. Hal seperti itu kadang-kadang¯\_(ツ)_/¯
.Linux: modul Impor yang terletak di /usr/local/lib/python2.7/dist-paket
Jika anda're menggunakan modul yang disusun dalam C, don't lupa untuk chmod tersebut .jadi file setelah
sudo setup.py install
.Masalah saya adalah bahwa saya menambahkan direktori dengan
__init__.py
file untuk PYTHONPATH, ketika benar-benar saya butuhkan untuk menambahkan direktori induk.Dalam kasus saya, masalahnya adalah saya menghubungkan ke debug
python
&boost::Python
, yang membutuhkan bahwa perpanjangan akanFooLib_d.pyd
, bukan hanyaFooLib.pyd
; mengganti nama file atau memperbaruiCMakeLists.txt
properties tetap kesalahan.Dalam kasus saya, karena saya'm menggunakan PyCharm dan PyCharm membuat 'venv' untuk setiap proyek di folder proyek, tapi itu hanya sebuah mini env python. Meskipun anda telah menginstal perpustakaan yang anda butuhkan dalam Python, tapi di proyek kustom anda 'venv', hal ini tidak tersedia. Ini adalah alasan sebenarnya dari 'ImportError: No module bernama xxxxxx' terjadi di PyCharm. Untuk mengatasi masalah ini, anda harus menambahkan library untuk proyek anda kustom env dengan langkah-langkah ini:
Menikmati.
Jika anda telah mencoba semua metode yang diberikan di atas tapi gagal, mungkin modul anda memiliki sama nama sebagai built-in modul. Atau, sebuah modul dengan sama nama yang ada di folder yang memiliki prioritas tinggi dalam
sys.jalan
dari anda modul's.Untuk men-debug, mengatakan anda
dari foo.bar impor baz
keluhanImportError: No module named bar
. Berubah untukmengimpor foo; cetak foo
, yang akan menunjukkan jalanfoo
. Itu apa yang anda harapkan?Jika tidak, ganti nama
foo
atau gunakan mutlak impor.Tetap masalah saya dengan menulis
cetak (sys.path)
dan menemukan bahwa python menggunakan out of date paket meskipun instalasi yang bersih. Menghapus ini dibuat python secara otomatis menggunakan paket.Untuk semua orang yang masih memiliki masalah ini. Saya percaya Pycharm bingung dengan impor. Bagi saya, ketika saya menulis 'dari namespace impor sesuatu yang', baris sebelumnya mendapat digarisbawahi dengan warna merah, menandakan bahwa ada kesalahan, tetapi bekerja. Namun ''dari .namespace impor sesuatu yang' doesn't mendapatkan digarisbawahi, tetapi juga doesn't bekerja.
Mencoba