Tidak dapat mengimpor modul yang pasti diinstal

144

Setelah menginstal mekanik , saya sepertinya tidak dapat mengimpornya.

Saya telah mencoba menginstal dari pip, easy_install, dan via python setup.py installdari repo ini: https://github.com/abielr/mechanize . Semua ini tidak berhasil, karena setiap kali saya memasukkan interaktif Python, saya mendapatkan:

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mechanize
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>> 

Instalasi yang saya jalankan sebelumnya melaporkan bahwa mereka telah selesai dengan sukses, jadi saya berharap impor bekerja. Apa yang bisa menyebabkan kesalahan ini?

Roy
sumber
Bisakah Anda menunjukkan kepada kami hasil dari menjalankan easy_install? Juga, silahkan konfirmasi path lengkap dari easy_install, pip, dan python.
larsks
Apakah Anda yakin itu tidak diinstal ke 2.6 (yang default di ubuntu? (Setidaknya itu di debian saya)
dav1d
baik, output dari instalasi mudah menunjukkan itu diinstal ke 2.7: Dipasang /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
roy
@larks - menambahkan info itu dalam postingan asli
roy
Saya baru saja mencoba semua cara ini - setup.py, easy_install, pip - dari pypi dan repo, tapi saya tidak bisa membuatnya gagal. Bisakah Anda memeriksa sys.pathuntuk melihat apakah Anda mencari di tempat yang tepat, ls -laR /usr/local/lib/python2.7/dist-packages/mech*untuk memeriksa masalah izin, dan melihat imp.find_module("mechanize")untuk membedakan antara kesalahan tidak dapat menemukannya dan tidak dapat-bertahan-mengimpor-itu?
DSM

Jawaban:

100

Dalam kasus saya, ini masalah izin. Paket itu entah bagaimana diinstal dengan izin root rw saja, pengguna lain tidak dapat menemukannya!

Paul Wang
sumber
26
Ini terjadi pada saya, hanya berlari sudo pip install .... Perbaikan sederhana:sudo chmod -R ugo+rX /lib/python2.7/site-packages/
jozxyqk
3
Saya telah mengalami ini berkali-kali dan saya pikir saya baru saja menemukan alasannya: umask dilewatkan melalui sudo, jadi jika umask pribadi Anda ketat dan Anda menggunakan sudo untuk menginstal, file dan direktori akan sangat dibatasi. Jika Anda hanya su pertama dan kemudian melakukan instal dari shell root penuh, instal yang dihasilkan dapat digunakan (setidaknya untuk saya). Ini untuk pip, tetapi mungkin berlaku untuk apt-get juga. Jika orang lain mengkonfirmasi penyebab ini, mungkin ingin mengubah jawabannya?
Brandyn
Menambahkan ke komentar jozxyqk: pastikan Anda mendapatkan direktori yang benar dengan melakukan $ pip show <package_name>
Federico
2
Sama untuk ku. Saya bekerja dengan Python 3.6 di Mac, begitu sudo chmod 777 /usr/local/lib/python3.6/site-packagespula triknya
Antonio Serrano
3
sudo 777 selalu merupakan ide yang sangat buruk
Marx
81

Saya memiliki masalah yang sama: skrip dengan import coloramamelemparkan dan ImportError, tetapi sudo pip install coloramamengatakan kepada saya "paket sudah diinstal".

Saya perbaiki: menjalankan pip tanpa sudo : pip install colorama. Kemudian pip setuju bahwa itu perlu diinstal, diinstal, dan skrip saya berjalan.

Lingkungan saya adalah Ubuntu 14,04 32-bit; Saya pikir saya melihat ini sebelum dan sesudah saya mengaktifkan virtualenv saya.

PEMBARUAN : lebih baik, gunakan python -m pip install <package>. Manfaat dari hal ini adalah, karena Anda mengeksekusi versi python spesifik yang Anda inginkan dalam paket, pip akan menginstal paket tersebut ke python "benar". Sekali lagi, jangan gunakan sudo dalam kasus ini ... maka Anda mendapatkan paket di tempat yang tepat, tetapi mungkin dengan izin root (yang tidak diinginkan).

Dan H
sumber
1
atau Anda dapat menggunakan bendera -H sudo
Graydyn Young
21

Ini masalah jalur python.

Dalam kasus saya, saya memasang python di:

/Library/Frameworks/Python.framework/Versions/2.6/bin/python,

dan tidak ada direktori paket situs di dalam python2.6.

Paket (SOAPpy) saya instal oleh pip terletak

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

Dan paket situs tidak di jalur python, yang saya lakukan adalah menambahkan paket situs ke PYTHONPATH secara permanen.

  1. Buka Terminal
  2. Ketik open .bash_profile
  3. Di file teks yang muncul, tambahkan baris ini di akhir:

    ekspor PYTHONPATH = $ PYTHONPATH: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

  4. Simpan file, restart Terminal, dan Anda selesai
pengguna1552891
sumber
Ini bekerja untuk saya dalam membuat Jenkins bekerja dengan selenium python.
edst
Ini berhasil bagi saya dalam menjalankan seledri melalui penyelia, ketika skrip bash saya memanggil skrip seledri; skrip seledri tidak dapat mengimpor modul yang sudah diinstal di dalam pip saya. Terima kasih banyak.
Shivam Sharma
Catatan: kemungkinan kesalahan impor lainnya adalah Anda memiliki beberapa versi Python yang diinstal di komputer Anda. Misalnya, satu dari sistem Python dan satu dari Miniconda atau Anaconda. Karena itu, pastikan selalu menggunakan "pip" yang sesuai.
Sanchit
8

Mekanisme impor Python berfungsi, sungguh, jadi, baik:

  1. PYTHONPATH Anda salah,
  2. Pustaka Anda tidak terpasang di tempat yang Anda pikirkan
  3. Anda memiliki perpustakaan lain dengan nama yang sama menutupi yang ini
Ali Afshar
sumber
1
Itu tidak bisa menjadi opsi 3 dalam hal ini; itu tidak akan membuang ImportError.
Martijn Pieters
2
mungkin 2? Saya hanya tidak tahu mengapa itu akan menginstal di tempat yang salah untuk perpustakaan yang satu ini, di mana kebanyakan orang lain baik-baik saja.
Roy
3
Opsi 4: PYTHONPATH Anda benar, perpustakaan Anda adalah tempat yang Anda inginkan, Anda tidak memiliki perpustakaan yang menutupi ini ... tetapi karena Anda menggunakannya sudo pip installterinstal dengan root privs, dan pada waktu impor ada sesuatu yang gagal karena kurangnya baca atau tulis akses.
Dan H
2
Tidak sepenuhnya benar, @MartijnPieters: jika ada impor formulir "dari <package> import <foo>", dan jika paket yang menghalangi tidak memiliki "foo", maka Anda akan mendapatkan kesalahan impor untuk opsi 3.
Dan H
@ Tidak yakin, tapi itu bukan bentuk yang digunakan OP.
Martijn Pieters
8

Saya telah membenturkan kepala saya ke monitor saya tentang hal ini sampai magang muda mengatakan kepada saya rahasianya adalah "python setup.py install" di dalam direktori modul.

Untuk beberapa alasan, menjalankan pengaturan dari sana membuatnya berfungsi.

Agar jelas, jika nama modul Anda adalah "foo":

[burnc7 (2016-06-21 15:28:49) git]# ls -l
total 1
drwxr-xr-x 7 root root  118 Jun 21 15:22 foo
[burnc7 (2016-06-21 15:28:51) git]# cd foo
[burnc7 (2016-06-21 15:28:53) foo]# ls -l
total 2
drwxr-xr-x 2 root root   93 Jun 21 15:23 foo
-rw-r--r-- 1 root root  416 May 31 12:26 setup.py
[burnc7 (2016-06-21 15:28:54) foo]# python setup.py install
<--snip-->

Jika Anda mencoba menjalankan setup.py dari direktori lain dengan memanggil path-nya, Anda berakhir dengan instalasi borked.

TIDAK BEKERJA:

python /root/foo/setup.py install

APAKAH BEKERJA:

cd /root/foo
python setup.py install
Lokal
sumber
7

Saya dapat memperbaiki masalah ini dengan pendekatan gabungan. Pertama, saya mengikuti saran Chris, membuka baris perintah dan mengetik 'pip show packagename' Ini memberikan lokasi paket yang diinstal.

Selanjutnya, saya membuka python dan mengetik 'import sys', lalu 'sys.path' untuk menunjukkan di mana python saya mencari paket apa pun yang saya impor. Sayangnya, lokasi yang ditunjukkan pada langkah pertama BUKAN dalam daftar.

Langkah terakhir, saya mengetik 'sys.path.append (' package_location_seen_in_step_1 '). Anda secara opsional dapat mengulangi langkah kedua untuk melihat lokasi sekarang dalam daftar.

Langkah uji, coba impor paket lagi ... berfungsi.

Kelemahannya? Ini bersifat sementara, dan Anda harus menambahkannya ke daftar setiap kali.

MJ_
sumber
5

Saya menemukan ini ketika mencoba menggunakan keyring yang saya instal melalui sudo pip install keyring . Seperti yang disebutkan dalam jawaban lain, ini masalah izin dalam kasus saya.

Apa yang berhasil untuk saya:

  1. Keyring yang belum diinstal:
    • sudo pip uninstall keyring
  2. Saya menggunakan -Hopsi sudo dan menginstal ulang keyring:
    • sudo -H pip install keyring

Semoga ini membantu.

penipu
sumber
3

Saya baru mengenal python. Saya memperbaiki masalah ini dengan mengubah jalur penerjemah proyek.
File -> Settings -> Project -> Project Interpreter

Amit Dheemate
sumber
Dari mana, sebuah IDE atau ???
Christopher Kikoti
2

Saya tidak bisa membuat PYTHONPATH saya berfungsi dengan baik. Saya menyadari bahwa menambahkan exportmasalah telah diperbaiki:

(berhasil)

export PYTHONPATH=$PYTHONPATH:~/test/site-packages

vs.

(tidak bekerja)

PYTHONPATH=$PYTHONPATH:~/test/site-packages
George Weber
sumber
2

Dalam kasus saya, saya telah lari pip install Django==1.11dan tidak akan mengimpor dari pythonjuru bahasa.

Menjelajahi perintah pip yang saya temukan pip showterlihat seperti ini:

> pip show Django
Name: Django
Version: 1.11
...
Location: /usr/lib/python3.4/site-packages
...

Perhatikan lokasi yang tertulis '3.4'. Saya menemukan bahwa- pythonperintah itu ditautkanpython2.7

/usr/bin> ls -l python
lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7

Tepat di sebelah itu saya menemukan tautan yang disebut python3jadi saya menggunakannya. Anda juga dapat mengubah tautan ke python3.4. Itu akan memperbaikinya juga.

Chris
sumber
1

Dalam kasus saya itu adalah masalah dengan file .py init yang hilang dalam modul, yang ingin saya impor di lingkungan Python 2.7.

Python 3.3+ memiliki Paket Namespace Tersirat yang memungkinkannya untuk membuat paket tanpa file .py init .

jens_laufer
sumber
1

Jika jawaban lain yang disebutkan tidak sesuai untuk Anda, coba hapus cache pip Anda dan instal ulang paket. Mesin saya menjalankan Ubuntu14.04 dan terletak di bawah ~/.cache/pip. Menghapus folder ini membantu saya.

Scrotch
sumber
1

Juga, pastikan bahwa Anda tidak bingung pip3dengan pip. Apa yang saya temukan adalah bahwa paket yang diinstal dengan piptidak bekerja dengan python3dan sebaliknya.

Devansh Maurya
sumber
0

Ketika Anda menginstal melalui easy_installatau pip, apakah berhasil menyelesaikan? Apa hasil lengkapnya? Instalasi python mana yang Anda gunakan? Anda mungkin perlu menggunakan sudosebelum perintah instalasi, jika Anda memasang modul ke direktori sistem (jika Anda menggunakan instalasi sistem python, mungkin). Tidak ada banyak informasi berguna dalam pertanyaan Anda yang harus ditiadakan, tetapi beberapa alat yang mungkin akan membantu termasuk:

  • echo $PYTHONPATHdan / atau echo $PATH: ketika mengimpor modul, Python mencari salah satu variabel lingkungan ini (daftar direktori, :dibatasi) untuk modul yang Anda inginkan. Mengimpor masalah seringkali karena direktori yang benar tidak ada dalam daftar ini

  • which python,, which pipatau which easy_install: ini akan memberi tahu Anda lokasi setiap executable. Mungkin membantu untuk mengetahui.

  • Gunakan virtualenv , seperti yang disarankan @JesseBriggs. Ini bekerja dengan sangat baik pipuntuk membantu Anda mengisolasi dan mengelola modul dan lingkungan untuk proyek Python yang terpisah.

Ryan Artecona
sumber
0

Saya punya masalah persis ini, tetapi tidak ada jawaban di atas yang berfungsi. Itu membuat saya gila sampai saya perhatikan bahwa sys.path berbeda setelah saya mengimpor dari proyek induk. Ternyata saya telah menggunakan importlib untuk menulis sedikit fungsi untuk mengimpor file yang tidak ada dalam hierarki proyek. Gagasan buruk: Saya lupa bahwa saya telah melakukan ini. Lebih buruk lagi, proses impor mucked dengan sys.path - dan membiarkannya seperti itu. Ide yang sangat buruk

Solusinya adalah menghentikan itu, dan cukup meletakkan file yang saya butuhkan untuk mengimpor ke proyek. Pendekatan lain adalah menempatkan file ke dalam proyeknya sendiri, karena perlu dibangun kembali dari waktu ke waktu, dan pembangunan kembali mungkin atau mungkin tidak bersamaan dengan pembangunan kembali proyek utama.

ivanlan
sumber
0

Saya punya masalah dengan 2.7 dan 3.5 yang diinstal pada sistem saya mencoba untuk menguji bot telegram dengan Python-Telegram-Bot .

Saya tidak bisa menjalankannya setelah menginstal dengan pip dan pip3, dengan sudo atau tanpa. Saya selalu mendapat:

Traceback (most recent call last):
  File "telegram.py", line 2, in <module>
    from telegram.ext import Updater
  File "$USER/telegram.py", line 2, in <module>
    from telegram.ext import Updater
ImportError: No module named 'telegram.ext'; 'telegram' is not a package

Membaca pesan kesalahan dengan benar memberitahu saya bahwa python mencari di direktori saat ini untuk telegram.py. Dan benar, saya punya skrip yang tergeletak di sana bernama telegram.py dan ini dimuat oleh python ketika saya menelepon import.

Kesimpulannya, pastikan Anda tidak memiliki package.pydir dalam pekerjaan Anda saat ini ketika mencoba untuk mengimpor. (Dan baca pesan kesalahan secara menyeluruh).

Patrick B.
sumber
0

Saya memiliki masalah yang sama (pada Windows) dan penyebab utama dalam kasus saya adalah perangkat lunak ANTIVIRUS ! Ini memiliki fitur "Auto-Containment", yang membungkus proses yang berjalan dengan semacam mesin virtual. Gejalanya adalah: pip install somemoduleberfungsi dengan baik dalam satu jendela cmd-line dan import somemodulegagal ketika dieksekusi dari proses lain dengan kesalahan

ModuleNotFoundError: No module named 'somemodule'

Saya harap ini akan menghemat waktu untuk seseorang :)

Dima Gershman
sumber
0

Mungkin agak di luar topik, tetapi saya punya masalah import PyYAML. Tunjukkan bahwa Anda perlu melakukannya import yaml. (tebak itu rtfm klasik ...)

huh
sumber
0

Saya punya masalah serupa menggunakan Django. Dalam kasus saya, saya bisa mengimpor modul dari shell Django, tetapi tidak dari .py yang mengimpor modul.
Masalahnya adalah saya menjalankan server Django (oleh karena itu, mengeksekusi .py) dari virtualenv yang berbeda dari mana modul telah diinstal.

Sebaliknya, contoh shell dijalankan di virtualenv yang benar. Makanya, mengapa itu berhasil.

aleclara95
sumber
0

Ini bekerja!!!

Ini sering terjadi ketika modul diinstal ke versi python yang lebih lama atau direktori lain, tidak perlu khawatir karena solusinya sederhana. - impor modul dari direktori tempat modul dipasang. Anda dapat melakukan ini dengan mengimpor sysmodul python terlebih dahulu kemudian mengimpor dari jalur di mana modul diinstal

import sys
sys.path.append("directory in which module is installed")

import <module_name>
Terrence_Freeman
sumber
0

Sebagian besar kasus yang mungkin telah dicakup dalam solusi, hanya berbagi kasus saya, kebetulan saya menginstal paket di satu lingkungan (misalnya X) dan saya mengimpor paket di lingkungan lain (misalnya Y). Jadi, selalu pastikan bahwa Anda mengimpor paket dari lingkungan tempat Anda menginstal paket.

Pedram
sumber
0

Sesuatu yang bekerja untuk saya adalah:

python -m pip install -user {package name}

Perintah tidak memerlukan sudo. Ini diuji pada OSX Mojave.

ISaan
sumber
0

Dalam kasus saya, saya juga harus menginstal modul untuk superuser juga.

sudo su
pip install <module>

Rupanya superuse tidak dapat mengakses file pengguna normal dalam keadaan tertentu.

Zciurus-Alt-Del
sumber
0

Bagi saya itu memastikan versi modul selaras dengan versi Python yang saya gunakan .. Saya membangun gambar pada sebuah kotak dengan Python 3.6 dan kemudian menyuntikkan ke gambar Docker yang kebetulan memiliki 3,7 diinstal, dan kemudian membenturkan kepalaku ketika Python memberitahuku modul tidak diinstal ...

36m untuk Python 3.6 bsonnumpy.cpython-36m-x86_64-linux-gnu.so

37m untuk Python 3.7 bsonnumpy.cpython-37m-x86_64-linux-gnu.so

streetster
sumber
pip installversi yang cocok dengan versi Python yang Anda gunakan. Apa kesalahan yang Anda dapatkan, dan apa output daripython --version
streetster
python --versi memberi saya: Python 3.7.7 dan ketika saya chek di mana paket diinstal dengan pip menunjukkan librosa memberi; Lokasi: /home/ec2-user/anaconda3/lib/python3.7/site-packages bagaimana paket itu berada di tempat yang tepat, tetapi ketika saya mengimpor paket itu memberikan: tidak ada nama modul yang saya kerjakan di AWS Sagemaker env Pytorch_p36
Walid Bousseta
mungkin Anda ingin menggunakan pytorch_p37?
streetster
tidak ada pytorch_p37
Walid Bousseta
0

Saya tahu ini adalah posting yang sangat lama tapi bagi saya, saya punya masalah dengan 32 bit python dan 64 bit python diinstal. Setelah saya menghapus python 32 bit, semuanya berjalan sebagaimana mestinya.

Moultrie
sumber
0

Saya telah memecahkan masalah saya bahwa perpustakaan yang sama berfungsi dengan baik di satu proyek (A) tetapi mengimpor perpustakaan yang sama di proyek lain (B) menyebabkan kesalahan. Saya menggunakan Pycharm sebagai IDE di OS Windows. Jadi, setelah mencoba banyak solusi potensial dan gagal menyelesaikan masalah, saya melakukan dua hal ini (menghapus folder "Venv", dan menerjemahkan juru bahasa):

Proyek 1-In (B), ada folder bernama ("venv"), yang terletak di Pustaka Eksternal /. Saya menghapus folder itu.

2-Langkah 1 (menghapus folder "venv") menyebabkan kesalahan dalam Konfigurasi Interpreter Python, dan ada pesan yang ditampilkan di atas layar yang mengatakan "Interpreter python tidak valid dipilih untuk proyek" dan "konfigurasikan python interpreter", pilih tautan itu dan membuka jendela baru. Di dalam daftar drop-down "Project Interpreter", ada garis berwarna Merah yang menunjukkan juru bahasa yang tidak valid sebelumnya. Sekarang, Buka daftar ini dan pilih Penerjemah Python (dalam kasus saya, ini adalah Python 3.7). Tekan "Terapkan" dan "OK" di bagian bawah dan Anda siap melakukannya.

Catatan: Ini berpotensi masalah di mana Lingkungan Virtual Proyek saya (B) tidak mengenali pustaka yang sudah diinstal dan berfungsi.

Hasnain Haider
sumber
0

Jika Anda menggunakan lingkungan virtual, gunakan pipenv install <module name>bukanpip install <module name>

Bekerja untukku.

Manu
sumber
pipenv tidak ditemukan
Walid Bousseta
0

Punya masalah ini juga .. paket diinstal pada Python 3.8.0 tetapi VS Code menjalankan skrip saya menggunakan versi yang lebih lama (3.4)

memperbaiki di terminal:

py .py

Pastikan Anda menginstal paket pada Versi Python yang tepat

Aramich100
sumber
0

Seperti yang dilakukan teman untuk saya hari ini, inilah yang membantu saya (saya menggunakan Windows):

Tekan 'Pengaturan' -> 'Proyek' -> 'Project Interpreter'. Di sini, di jendela di sebelah kanan, ada garis dengan judul 'Project Interpreter' di sebelah kiri. Klik baris ini dan itu akan membuka beberapa baris tambahan.

Sekarang tekan baris 'Tampilkan Semua'. Sebuah jendela akan terbuka. Di jendela ini tekan tanda '+' kecil di sudut kanan atas.

Jendela baru akan terbuka. Di sebelah kiri ada 4 tab, tekan yang paling atas, yang bertuliskan 'Virtualenv Environment'. Sekarang, di jendela di sebelah kanan, tandai opsi 'Lingkungan Yang Ada'. Baris 'Juru Bahasa' akan menjadi jelas. Tekan tombol '...' di sebelah kanan baris.

Sekarang, jendela penjelajahan akan terbuka. Jelajahi direktori tempat Anda menginstal Python . Bukan yang dengan PyCharm. Ketika Anda sampai di sana, pilih file 'python.exe' dan tekan OK (jendela akan hilang).

Tekan OK lagi (jendela ini juga akan hilang).

Sekarang di jendela ini pastikan baris baru yang Anda buat ditandai, dan tekan OK lagi.

Sekarang, semua paket yang terinstal akan terlihat di penerjemah proyek, dan dibaca oleh program Anda.

Roma
sumber
0

Solusi paling sederhana yang bekerja untuk saya yang tidak saya lihat disebutkan di utas ini:

Saya memiliki beberapa versi Python yang diinstal tetapi mencoba menggunakan Python3.7 - jadi saya harus menggunakan:

sudo pip3.7 install <package>

J. Saw
sumber