Python diinstal di direktori lokal.
Pohon direktori saya terlihat seperti ini:
(local directory)/site-packages/toolkit/interface.py
Kode saya ada di sini:
(local directory)/site-packages/toolkit/examples/mountain.py
Untuk menjalankan contoh, saya menulis python mountain.py
, dan dalam kode yang saya miliki:
from toolkit.interface import interface
Dan saya mendapatkan kesalahan:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
Saya sudah memeriksa sys.path
dan di sana saya memiliki direktori /site-packages
. Juga, saya memiliki file __init__.py.bin
di folder toolkit untuk menunjukkan kepada Python bahwa ini adalah paket. Saya juga punya __init__.py.bin
di direktori contoh.
Aku tidak tahu mengapa Python tidak dapat menemukan file bila dalam sys.path
. Ada ide? Bisakah itu menjadi masalah izin? Apakah saya memerlukan izin eksekusi?
python
importerror
python-import
Eduardo
sumber
sumber
755
. Itu karenaumask
pada mesin itu0027
karena yangothers
tidak memilikiread
izin menyebabkan modul tidak dapat dibaca. Menambahkanread
izin memperbaiki masalah saya. Ada baiknya memeriksa izin direktori target pasca-instalasi.interface
(telah menjadi konflik).Jawaban:
Berdasarkan komentar Anda pada posting orip, saya kira inilah yang terjadi:
__init__.py
di windows.__init__.py
(sekarang disebut__init__.py.bin
) berarti python tidak memahami toolkit sebagai paket.__init__.py
di direktori yang sesuai dan semuanya berfungsi ...?sumber
.bin
.python driver.py
ketika saya seharusnya menggunakanpython3 driver.py
sejak saya menginstalpip3
.Apakah
punya
__init__.py
?Untuk membuat impor berjalan melalui direktori Anda, setiap direktori harus memiliki
__init__.py
file.sumber
Saya mengalami sesuatu yang sangat mirip ketika saya melakukan latihan ini di LPTHW; Saya tidak pernah bisa mendapatkan Python untuk mengenali bahwa saya memiliki file di direktori tempat saya menelepon. Tetapi pada akhirnya saya bisa membuatnya bekerja. Apa yang saya lakukan, dan apa yang saya rekomendasikan, adalah untuk mencoba ini:
(CATATAN: Dari posting awal Anda, saya berasumsi Anda menggunakan mesin berbasis * NIX dan menjalankan beberapa hal dari baris perintah, jadi saran ini disesuaikan dengan itu. Karena saya menjalankan Ubuntu, inilah yang saya lakukan)
1) Ubah direktori (cd) ke direktori di atas direktori tempat file Anda berada. Dalam hal ini, Anda mencoba menjalankan
mountain.py
file, dan mencoba memanggiltoolkit.interface.py
modul, yang berada di direktori terpisah. Dalam hal ini, Anda akan pergi ke direktori yang berisi path ke kedua file tersebut (atau dengan kata lain, direktori terdekat yang path dari kedua file tersebut bagi). Yang dalam hal ini adalahtoolkit
direktori.2) Ketika Anda berada di
tookit
direktori, masukkan baris kode ini pada baris perintah Anda:export PYTHONPATH=.
Ini menetapkan PYTHONPATH Anda menjadi ".", Yang pada dasarnya berarti bahwa PYTHONPATH Anda sekarang akan mencari file yang disebut di dalam direktori tempat Anda berada saat ini, (dan lebih tepatnya, di cabang sub-direktori dari direktori tempat Anda berada. Jadi tidak hanya melihat di direktori Anda saat ini, tetapi di semua direktori yang ada di direktori Anda saat ini).
3) Setelah Anda mengatur PYTHONPATH Anda pada langkah di atas, jalankan modul Anda dari direktori Anda saat ini (
toolkit
direktori). Python sekarang harus menemukan dan memuat modul yang Anda tentukan.Semoga ini membantu. Saya cukup frustrasi dengan ini sendiri.
sumber
set PYTHONPATH=.
.Pada * nix, juga pastikan bahwa PYTHONPATH dikonfigurasi dengan benar, terutama yang memiliki format ini:
(Pikirkan
.:
di awal, sehingga dapat mencari di direktori saat ini juga.)Mungkin juga di lokasi lain, tergantung pada versinya:
sumber
.:/usr/lib/python
,.:/usr/lib/python2.6
,.:/usr/lib/python2.7
dan lain-lain tergantung pada versi#!/usr/bin/python
di akhir file juga harus berhasil, bukan?Saya memecahkan masalah saya sendiri, dan saya akan menulis ringkasan tentang hal-hal yang salah dan solusinya:
File harus dipanggil dengan tepat
__init__.py
. Jika ekstensi berbeda seperti dalam kasus saya.py.bin
maka Python tidak dapat bergerak melalui direktori dan kemudian tidak dapat menemukan modul. Untuk mengedit file, Anda perlu menggunakan editor Linux, seperti vi atau nano . Jika Anda menggunakan editor Windows ini akan menulis beberapa karakter tersembunyi.Masalah lain yang mempengaruhi itu adalah bahwa saya memiliki versi Python lain yang diinstal oleh root, jadi jika seseorang bekerja dengan instalasi lokal python, pastikan bahwa instalasi Python yang menjalankan program adalah Python lokal. Untuk memeriksanya, lakukan saja
which python
, dan lihat apakah executable-nya ada di direktori lokal Anda. Jika tidak, ubah jalurnya, tetapi pastikan direktori Python lokal lebih dulu dari pada Python lainnya.sumber
__init__.py
file saya ditempatkan di direktori yang relevan tetapi saya secara manual menginstal paket menggunakansetup.py
. Bagaimana menginstal paket baru akan mengganggu impor.solusi mudah adalah dengan menginstal modul menggunakan
python -m pip install <library-name>
bukanpip install <library-name>
Anda dapat menggunakan sudo jika terjadi pembatasan adminsumber
python -m
dicapai di depanpip install
?python -m pip...
berfungsi, tetapipip...
tidak: mereka secara efektif adalah hal yang sama, dengan asumsi mereka sebenarnya berada dipython
direktori yang sama . Kemungkinan, situasi yang diamati adalah bahwa program yang berdiri sendiripip
tidak tersedia di beberapa rilis python yang lebih lama (tetapi sekarang dalam 2.7 terbaru & 3.x). Dalam hal ini,python
itu ada di virtualenv lokal danpip
tidak, jadipython -m pip install
akan menginstal di virtualenv lokal, sedangkanpip
akan mencoba untuk menginstal di sistem python (dan gagal tanpa sudo). Bagaimanapun, itu tidak masuk akal.Untuk menandai direktori sebagai paket Anda memerlukan file yang bernama
__init__.py
, apakah ini membantu?sumber
Menggunakan
PyCharm
(bagian dari paket JetBrains) Anda perlu mendefinisikan direktori skrip Anda sebagai Sumber:Right Click > Mark Directory as > Sources Root
sumber
Anda membaca jawaban ini mengatakan bahwa Anda
__init__.py
berada di tempat yang tepat, Anda telah menginstal semua dependensi dan Anda masih mendapatkanImportError
.Saya menghadapi masalah yang sama kecuali bahwa program saya akan berjalan dengan baik ketika dijalankan menggunakan PyCharm tetapi kesalahan di atas ketika saya akan menjalankannya dari terminal. Setelah menggali lebih jauh, saya menemukan bahwa
PYTHONPATH
tidak memiliki entri untuk direktori proyek. Jadi, saya mengaturPYTHONPATH
per pernyataan Impor berfungsi pada PyCharm tetapi tidak dari terminal :Ada cara lain untuk melakukan ini menggunakan
sys.path
:Anda dapat menggunakan insert / append berdasarkan urutan di mana Anda ingin proyek Anda dicari.
sumber
Bagi saya, itu adalah sesuatu yang sangat bodoh. Saya menginstal perpustakaan menggunakan
pip3 install
tetapi menjalankan program sayapython program.py
sebagai lawanpython3 program.py
.sumber
Ya. Anda memerlukan direktori untuk memuat
__init__.py
file tersebut, yaitu file yang menginisialisasi paket. Di sini, lihat ini .sumber
misalnya: / etc / environment
PYTHONPATH = $ PYTHONPATH: / opt / folder1: / opt / folder2
/ opt / folder1 / foo
/ opt / folder2 / foo
Dan, jika Anda mencoba mengimpor file foo, python tidak akan tahu yang mana yang Anda inginkan.
dari impor foo ... >>> importrorror: tidak ada modul bernama foo
sumber
Dua sen saya:
Meludah:
Ini membingungkan saya - pergi melalui posting dan posting menyarankan hacks syspath jelek (seperti yang Anda lihat saya
__init__.py
semua ada di sana). Nah ternyata game / oblivion.py dan game / oblivion itu membingungkan python yang memuntahkan "No module bernama RecordGroups" yang agak tidak membantu. Saya akan tertarik dengan solusi dan / atau tautan yang mendokumentasikan perilaku (nama yang sama) ini -> EDIT (2017.01.24) - lihat Bagaimana Jika Saya Memiliki Modul dan Paket Dengan Nama yang Sama? Biasanya paket menarik diutamakan tetapi tampaknya peluncur kami melanggar ini.EDIT (2015.01.17): Saya tidak menyebutkan kami menggunakan peluncur khusus yang dibedah di sini .
sumber
game.oblivion.RecordGroups !== game/oblivion/patchers/RecordGroups.py
Mungkin ingin memperbaikinya dengan menambahkan kode python Anda untuk menggunakan:game.oblivion.patchers.RecordGroups
game.oblivion.__init__.py
tetapi mungkin harus memeriksa iniLinux: Modul yang diimpor terletak di /usr/local/lib/python2.7/dist-packages
Jika Anda menggunakan modul yang dikompilasi dalam C, jangan lupa untuk chmod file .so setelah
sudo setup.py install
.sumber
Dalam kasus saya, masalahnya adalah saya menautkan ke debug
python
&boost::Python
, yang mengharuskan ekstensi menjadiFooLib_d.pyd
, bukan hanyaFooLib.pyd
; mengganti nama file atau memperbaruiCMakeLists.txt
properti memperbaiki kesalahan.sumber
Jika Anda telah mencoba semua metode yang disediakan di atas tetapi gagal, mungkin modul Anda memiliki nama yang sama dengan modul bawaan. Atau, modul dengan nama yang sama ada di folder yang memiliki prioritas tinggi
sys.path
daripada modul Anda.Untuk debug, ucapkan
from foo.bar import baz
keluhan AndaImportError: No module named bar
. Mengubah keimport foo; print foo
, yang akan menunjukkan jalurfoo
. Apakah itu yang Anda harapkan?Jika tidak, Ubah nama
foo
atau gunakan impor absolut .sumber
ImportError: No module named foo
.Masalah saya adalah saya menambahkan direktori dengan
__init__.py
file ke PYTHONPATH, padahal sebenarnya saya perlu menambahkan direktori induknya.sumber
Untuk semua yang masih memiliki masalah ini. Saya percaya Pycharm bingung dengan impor. Bagi saya, ketika saya menulis 'dari namespace impor sesuatu', baris sebelumnya akan digarisbawahi dalam warna merah, menandakan bahwa ada kesalahan, tetapi berfungsi. Namun '' dari .namespace mengimpor sesuatu 'tidak digarisbawahi, tetapi juga tidak berfungsi.
Mencoba
sumber
Memperbaiki masalah saya dengan menulis
print (sys.path)
dan menemukan bahwa python menggunakan paket-paket yang sudah ketinggalan zaman meskipun instalasinya bersih. Menghapus python buatan ini secara otomatis menggunakan paket yang benar.sumber
Dalam kasus saya, karena saya menggunakan PyCharm dan PyCharm membuat 'venv' untuk setiap proyek di folder proyek, tetapi itu hanya env mini dari python. Meskipun Anda telah menginstal pustaka yang Anda butuhkan dengan Python, tetapi dalam proyek khusus Anda 'venv', itu tidak tersedia. Ini adalah alasan sebenarnya dari 'ImportError: Tidak ada modul bernama xxxxxx' terjadi di PyCharm. Untuk mengatasi masalah ini, Anda harus menambahkan perpustakaan ke proyek kustom Anda dengan langkah-langkah berikut:
Nikmati.
sumber
Setelah hanya mengalami masalah yang sama saya menemukan resolusi saya adalah untuk menghapus semua
pyc
file dari proyek saya, sepertinya file cache ini entah bagaimana menyebabkan kesalahan ini.Cara termudah yang saya temukan untuk melakukan ini adalah menavigasi ke folder proyek saya di Windows explorer dan mencari
*.pyc
, lalu memilih semua ( Ctrl+ A) dan menghapusnya ( Ctrl+ X).Mungkin saya bisa menyelesaikan masalah saya dengan hanya menghapus
pyc
file tertentu tetapi saya tidak pernah mencoba inisumber
Saya menghadapi masalah yang sama:
Import error
. Selain itu perpustakaan telah diinstal 100% dengan benar. Sumber masalahnya adalah bahwa pada versi python PC 3 saya (paket anaconda) telah diinstal). Inilah sebabnya perpustakaan diinstal tidak ke tempat yang tepat. Setelah itu saya baru saja mengubah ke versi python yang tepat di IDE PyCharm saya.sumber
Saya memiliki kesalahan yang sama. Itu disebabkan oleh seseorang yang membuat folder di folder yang sama dengan skrip saya, nama yang bertentangan dengan modul yang saya impor dari tempat lain. Alih-alih mengimpor modul eksternal, itu terlihat di dalam folder ini yang jelas tidak mengandung modul yang diharapkan.
sumber
Saya memiliki masalah yang sama (Python 2.7 Linux), saya telah menemukan solusinya dan saya ingin membagikannya. Dalam kasus saya, saya memiliki struktur di bawah ini:
Di 'main.py' saya telah mencoba semua kombinasi dengan gagal di bawah ini:
Solusinya jauh lebih sederhana daripada yang saya kira. Saya mengganti nama folder "Booklet" menjadi "booklet" dan hanya itu. Sekarang Python dapat mengimpor Pertanyaan kelas secara normal dengan menggunakan kode 'main.py':
Dari sini saya dapat menyimpulkan bahwa Paket-Nama (folder) seperti 'buklet' harus dimulai dari huruf kecil, kalau tidak Python membingungkannya dengan nama Kelas dan Nama File.
Tampaknya, ini bukan masalah Anda, tetapi jawaban John Fouhy sangat bagus dan utas ini memiliki hampir semua hal yang dapat menyebabkan masalah ini. Jadi, ini satu hal lagi dan saya berharap mungkin ini bisa membantu orang lain.
sumber
Dalam kasus saya, saya memasukkan path ke folder package.egg daripada paket aktual di bawahnya. Saya menyalin paket ke tingkat atas dan berhasil.
sumber
Ini berfungsi untuk saya: Membuat
__init__.py
file di dalam folder induk (dalam kasus Anda, di dalamsite-packages
folder). Dan diimpor seperti ini:Semoga bermanfaat bagi Anda juga!
sumber
Di server linux coba
dos2unix script_name
(hapus semua (jika ada)
pyc
file dengan perintahfind . -name '*.pyc' -delete
)dan jalankan kembali dalam kasus ini jika Anda bekerja pada skrip di windows
sumber
Dalam kasus saya, saya menggunakan
sys.path.insert()
untuk mengimpor modul lokal dan mendapatkanmodule not found
dari perpustakaan yang berbeda. Saya harus meletakkan disys.path.insert()
bawah impor yang dilaporkanmodule not found
. Saya kira praktik terbaik adalah menempatkansys.path.insert()
di bagian bawah impor Anda.sumber