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?

Mengomentari pertanyaan (10)
Larutan

Berdasarkan komentar anda untuk orip's post, saya kira ini adalah apa yang terjadi:

  1. Anda diedit __init__.py pada windows.
  2. Jendela editor menambahkan sesuatu yang non-cetak, mungkin carriage-return (end-of-line di Windows CR/LF; di unix itu JIKA saja), atau mungkin CTRL-Z (windows end-of-file).
  3. Anda menggunakan WinSCP untuk menyalin file untuk anda unix kotak.
  4. WinSCP berpikir: "Ini memiliki sesuatu yang's tidak teks dasar; aku'll menempatkan .bin ekstensi untuk menunjukkan data biner."
  5. Hilang __init__.py (sekarang disebut __init__.py.bin) berarti python doesn't memahami toolkit sebagai sebuah paket.
  6. Anda membuat __init__.py di direktori yang sesuai dan semuanya bekerja... ?
Komentar (7)

Tidak

(local directory)/site-packages/toolkit

memiliki __init__.py?

Untuk membuat impor berjalan anda melalui direktori yang setiap direktori harus memiliki __init__.py file.

Komentar (2)

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)

  1. 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 memanggil toolkit.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 adalah toolkit direktori.

  2. 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).

  1. Setelah anda've mengatur PYTHONPATH pada langkah di atas, jalankan modul anda dari direktori anda saat ini (yang toolkit direktori). Python harus sekarang menemukan dan memuat modul yang anda tentukan.

Semoga ini bisa membantu. Saya cukup frustrasi dengan diri saya sendiri.

Komentar (2)

Pada *nix, juga pastikan bahwa PYTHONPATH dikonfigurasi dengan benar, terutama yang memiliki format ini:

 .:/usr/local/lib/python

(Pikiran .: di awal, sehingga dapat mencari pada direktori saat ini, juga.)

Hal ini juga dapat di lokasi lain, tergantung pada versi:

 .:/usr/lib/python
 .:/usr/lib/python2.6
 .:/usr/lib/python2.7 and etc.
Komentar (6)

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.

Komentar (3)

solusi yang mudah adalah dengan menginstal modul menggunakan python -m pip menginstal <perpustakaan-nama> bukan pip menginstal <perpustakaan-nama> anda dapat menggunakan sudo dalam kasus admin pembatasan

Komentar (3)

Untuk menandai sebuah direktori sebagai paket yang anda butuhkan dalam sebuah file bernama __init__.py, hal ini membantu?

Komentar (8)

Menggunakan PyCharm (bagian dari JetBrains suite) yang anda butuhkan untuk menentukan direktori skrip sebagai Sumber:
Klik kanan > Markus Direktori sebagai > Sumber Akar

Komentar (0)

Yup. Anda perlu direktori berisi __init__.py file, yaitu file yang akan menginisialisasi paket. Di sini, melihat-lihat di ini.

__init__.py file yang diperlukan untuk membuat Python mengobati direktori yang berisi paket; hal ini dilakukan untuk mencegah direktori dengan nama yang umum, seperti string, dari tidak sengaja bersembunyi berlaku modul yang terjadi kemudian pada module search path. Dalam kasus yang paling sederhana, __init__.py hanya bisa menjadi sebuah file kosong, tetapi ia juga dapat mengeksekusi kode inisialisasi untuk paket atau mengatur _\semua_\ variabel, dijelaskan kemudian.

Komentar (0)
  1. Anda harus memiliki file init.py di direktori yang sama di mana ia's file yang anda impor.
  2. Anda tidak dapat mencoba untuk mengimpor file yang memiliki nama yang sama dan menjadi sebuah file dari 2 folder dikonfigurasi pada PYTHONPATH.

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

Komentar (0)

Anda sedang membaca jawaban ini mengatakan bahwa anda __init__.py di tempat yang tepat, anda telah menginstal semua dependensi dan anda masih mendapatkan ImportError.

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 set PYTHONPATH per Import pernyataan bekerja pada PyCharm tapi tidak dari terminal:

export PYTHONPATH=$PYTHONPATH:`pwd`  (OR your project root directory)

Ada's cara lain untuk melakukan ini dengan menggunakan sys.jalan sebagai:

import sys
sys.path.insert(0,'') OR
sys.path.append('')

Anda dapat menggunakan menyisipkan/menambahkan berdasarkan urutan di mana anda ingin proyek anda yang akan dicari.

Komentar (0)

Saya dua sen:

Meludah:

Traceback (most recent call last):
      File "bash\bash.py", line 454, in main
        import bosh
      File "Wrye Bash Launcher.pyw", line 63, in load_module
        mod = imp.load_source(fullname,filename+ext,fp)
      File "bash\bosh.py", line 69, in 
        from game.oblivion.RecordGroups import MobWorlds, MobDials, MobICells, \
    ImportError: No module named RecordGroups

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.

Komentar (2)

Bagi saya, itu adalah sesuatu yang benar-benar bodoh. Saya menginstal perpustakaan menggunakan pip3 install tapi menjalankan program saya sebagai python program.py sebagai lawan python3 program.py. Hal seperti itu kadang-kadang ¯\_(ツ)_/¯.

Komentar (1)

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.

sudo chmod 755 /usr/local/lib/python2.7/dist-packages/*.so
Komentar (0)

Masalah saya adalah bahwa saya menambahkan direktori dengan __init__.py file untuk PYTHONPATH, ketika benar-benar saya butuhkan untuk menambahkan direktori induk.

Komentar (0)

Dalam kasus saya, masalahnya adalah saya menghubungkan ke debug python & boost::Python, yang membutuhkan bahwa perpanjangan akan FooLib_d.pyd, bukan hanya FooLib.pyd; mengganti nama file atau memperbarui CMakeLists.txt properties tetap kesalahan.

Komentar (0)

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:

  • Di PyCharm, dari menu 'File'->Pengaturan
  • Dalam dialog Pengaturan, Proyek: XXXProject->Proyek Penerjemah
  • Klik "Tambahkan" tombol, ini akan menunjukkan kepada anda 'Tersedia Paket' dialog
  • Mencari perpustakaan anda, klik 'Menginstal Paket'
  • Kemudian, semua yang anda butuhkan paket yang akan dipasang dalam proyek anda kustom 'venv' folder.

Menikmati.

Komentar (0)

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 keluhan ImportError: No module named bar. Berubah untuk mengimpor foo; cetak foo, yang akan menunjukkan jalan foo. Itu apa yang anda harapkan?

Jika tidak, ganti nama foo atau gunakan mutlak impor.

Komentar (1)

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.

Komentar (0)

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

try:
    from namespace import something 
except NameError:
    from .namespace import something
Komentar (1)