Không thể nhập mô-đun được cài đặt chắc chắn


144

Sau khi cài đặt cơ giới hóa , tôi dường như không thể nhập nó.

Tôi đã thử cài đặt từ pip, easy_install và thông qua python setup.py installrepo này: https://github.com/abielr/mechanize . Tất cả điều này đều vô ích, vì mỗi lần tôi nhập vào tương tác Python của tôi, tôi nhận được:

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
>>> 

Các cài đặt tôi đã chạy trước đây đã báo cáo rằng chúng đã hoàn thành thành công, vì vậy tôi hy vọng quá trình nhập sẽ hoạt động. Điều gì có thể gây ra lỗi này?


Bạn có thể chỉ cho chúng tôi đầu ra của việc chạy easy_installkhông? Ngoài ra, xin vui lòng xác nhận đường dẫn đầy đủ easy_install, pipvà của python.
larsks

Bạn có chắc chắn rằng nó chưa được cài đặt lên 2.6 (mặc định là trên Ubuntu? (Ít nhất là trên debian của tôi)
dav1d

tốt, đầu ra từ cài đặt dễ dàng cho thấy nó đã được cài đặt thành 2.7: Đã cài đặt /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
roy

@larks - đã thêm thông tin đó vào bài đăng ban đầu
roy

Tôi vừa mới thử cách này - setup.py, easy_install, pip - từ pypi và repo, nhưng tôi không thể làm cho nó thất bại. Bạn có thể kiểm tra sys.pathxem bạn có đang tìm đúng chỗ không, ls -laR /usr/local/lib/python2.7/dist-packages/mech*để kiểm tra sự cố về quyền và xem xét imp.find_module("mechanize")để phân biệt giữa lỗi không thể tìm thấy và không thể tồn tại khi nhập-lỗi?
DSM

Câu trả lời:


100

Trong trường hợp của tôi, đó là vấn đề cho phép. Gói này được cài đặt bằng cách nào đó chỉ có quyền root rw, người dùng khác không thể rw với nó!


26
Điều này xảy ra với tôi, chỉ cần chạy sudo pip install .... Cách khắc phục đơn giản:sudo chmod -R ugo+rX /lib/python2.7/site-packages/
jozxyqk 16/2/2015

3
Tôi đã gặp phải điều này nhiều lần và tôi nghĩ rằng tôi vừa phát hiện ra lý do: umask được truyền qua sudo, vì vậy nếu ô cá nhân của bạn bị chặt và bạn sử dụng sudo để cài đặt, các tệp và thư mục sẽ bị hạn chế quá mức. Nếu bạn chỉ đơn giản là su trước và sau đó thực hiện cài đặt từ một vỏ gốc đầy đủ, cài đặt kết quả là có thể sử dụng được (ít nhất là cho tôi). Điều này là cho pip, nhưng cũng có thể áp dụng cho apt-get. Nếu người khác xác nhận nguyên nhân này, có thể muốn sửa đổi câu trả lời cho phù hợp?
Brandyn

Thêm vào bình luận của jozxyqk: đảm bảo bạn có đúng thư mục bằng cách thực hiện $ pip show <pack_name>
Federico

2
Tương tự cho tôi. Tôi đang làm việc với Python 3.6 trên Mac, cũng vậy, sudo chmod 777 /usr/local/lib/python3.6/site-packagesmẹo này
Antonio Serrano

3
sudo 777 luôn là ý tưởng rất tồi
Marx

81

Tôi gặp vấn đề tương tự: tập lệnh import coloramabị ném và ImportError, nhưng sudo pip install coloramađang nói với tôi "gói đã được cài đặt".

Sửa lỗi của tôi: chạy pip mà không cần sudo : pip install colorama. Sau đó, pip đồng ý rằng nó cần được cài đặt, cài đặt nó và tập lệnh của tôi chạy.

Môi trường của tôi là Ubuntu 14.04 32-bit; Tôi nghĩ rằng tôi đã thấy điều này trước và sau khi tôi kích hoạt virtualenv của mình.

CẬP NHẬT : thậm chí tốt hơn, sử dụng python -m pip install <package>. Lợi ích của việc này là, vì bạn đang thực thi phiên bản cụ thể của python mà bạn muốn gói trong, pip sẽ cài đặt gói một cách chắc chắn vào python "phải". Một lần nữa, không sử dụng sudo trong trường hợp này ... sau đó bạn nhận được gói ở đúng nơi, nhưng có thể với quyền gốc (không mong muốn).


1
Ngoài ra, bạn có thể sử dụng cờ sudo -H
Graydyn Young

21

Đó là vấn đề đường dẫn trăn.

Trong trường hợp của tôi, tôi đã cài đặt python trong:

/ L Library / Frameworks / Python.framework / Versions / 2. 6 / bin / python,

và không có thư mục gói trang web trong python2.6.

Gói (SOAPpy) tôi cài đặt bằng pip được đặt

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

Và gói trang web không nằm trong đường dẫn python, tất cả những gì tôi đã làm là thêm các gói trang web vào PYTHONPATH vĩnh viễn.

  1. Mở Terminal
  2. Nhập .bash_profile mở
  3. Trong tệp văn bản bật lên, thêm dòng này ở cuối:

    xuất PYTHONPATH = $ PYTHONPATH: / System / L Library / Frameworks / Python.framework / Vionsions / .6 / lib / python2.6 / site-packages /

  4. Lưu tệp, khởi động lại Terminal và bạn đã hoàn tất

Điều này làm việc cho tôi trong việc khiến Jenkins làm việc với python selenium.
edst

Điều này làm việc cho tôi trong việc điều hành cần tây thông qua người giám sát, khi kịch bản bash của tôi gọi là kịch bản cần tây của tôi; kịch bản cần tây không thể nhập các mô-đun đã được cài đặt bên trong pip của tôi. Cảm ơn rất nhiều.
Shivam Sharma

Lưu ý: một khả năng khác của lỗi nhập là bạn đã cài đặt nhiều phiên bản Python trong máy tính của mình. Ví dụ: một từ Python của hệ thống và một từ Miniconda hoặc Anaconda. Do đó, hãy chắc chắn luôn luôn sử dụng "pip" tương ứng chính xác.
Sanchit

8

Cơ chế nhập Python hoạt động, thực sự, vì vậy, hoặc:

  1. PYTHONPATH của bạn sai,
  2. Thư viện của bạn không được cài đặt ở nơi bạn nghĩ
  3. Bạn có một thư viện khác có cùng tên che giấu cái này

1
Nó không thể là lựa chọn 3 trong trường hợp này; điều đó sẽ không ném một ImportError.
Martijn Pieters

2
có lẽ 2? Tôi chỉ không biết tại sao nó lại cài đặt sai vị trí cho một thư viện này, nơi mà hầu hết các thư viện khác đều ổn.
roy

3
Tùy chọn 4: PYTHONPATH của bạn đúng, thư viện của bạn là nơi bạn muốn, bạn không có thư viện che giấu điều này ... nhưng vì bạn đã sử dụng sudo pip installnên nó đã được cài đặt với quyền riêng tư và tại thời điểm nhập khẩu, một thứ gì đó đang bị ném bom vì thiếu đọc hoặc viết truy cập.
Dan H

2
Không hoàn toàn đúng, @MartijnPieters: nếu có nhập biểu mẫu "từ <gói> nhập <foo>" và nếu gói cản trở không có "foo", thì bạn sẽ gặp lỗi nhập cho tùy chọn 3.
Dan H

@DanH chắc chắn, nhưng đó không phải là hình thức mà OP đang sử dụng.
Martijn Pieters

8

Tôi đã đập đầu vào màn hình của mình về điều này cho đến khi một thực tập sinh trẻ tuổi nói với tôi bí mật là "cài đặt python setup.py" trong thư mục mô-đun.

Vì một số lý do, việc chạy thiết lập từ đó làm cho nó chỉ hoạt động.

Để rõ ràng, nếu tên mô-đun của bạn là "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-->

Nếu bạn cố gắng chạy setup.py từ bất kỳ thư mục nào khác bằng cách gọi ra đường dẫn của nó, bạn sẽ kết thúc với một bản cài đặt.

KHÔNG HOẠT ĐỘNG:

python /root/foo/setup.py install

LÀM VIỆC:

cd /root/foo
python setup.py install

7

Tôi đã có thể khắc phục vấn đề này bằng một phương pháp kết hợp. Đầu tiên, tôi làm theo lời khuyên của Chris, mở một dòng lệnh và gõ 'pip show packagename' Điều này cung cấp vị trí của gói được cài đặt.

Tiếp theo, tôi mở python và gõ 'import sys', sau đó 'sys.path' để hiển thị nơi python của tôi tìm kiếm bất kỳ gói nào tôi nhập. Than ôi, vị trí hiển thị trong bước đầu tiên KHÔNG có trong danh sách.

Bước cuối cùng, tôi đã gõ 'sys.path.append (' pack_location_seen_in_step_1 '). Bạn tùy ý có thể lặp lại bước hai để xem vị trí hiện có trong danh sách.

Bước kiểm tra, thử nhập lại gói ... nó hoạt động.

Nhược điểm? Nó là tạm thời, và bạn cần thêm nó vào danh sách mỗi lần.


5

Tôi đã gặp phải điều này trong khi cố gắng sử dụng keyring mà tôi đã cài đặt qua sudo pip install keyring . Như đã đề cập trong các câu trả lời khác, đó là vấn đề quyền trong trường hợp của tôi.

Điều gì làm việc cho tôi:

  1. Gỡ cài đặt khóa:
    • sudo pip uninstall keyring
  2. Tôi đã sử dụng -Htùy chọn của sudo và cài đặt lại keyring:
    • sudo -H pip install keyring

Hi vọng điêu nay co ich.


3

Tôi mới làm quen với trăn. Tôi đã khắc phục vấn đề này bằng cách thay đổi đường dẫn trình thông dịch dự án.
File -> Settings -> Project -> Project Interpreter


Từ đâu, một IDE hay ???
Christopher Kikoti

2

Tôi không thể làm cho PYTHONPATH của tôi hoạt động đúng. Tôi nhận ra thêmexport vấn đề:

(Đã làm việc)

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

so với

(đã không làm việc)

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

2

Trong trường hợp của tôi, tôi đã chạy pip install Django==1.11và nó sẽ không nhập từ trình pythonthông dịch.

Duyệt qua các lệnh của pip tôi thấy pip showgiống như thế này:

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

Lưu ý vị trí ghi '3,4'. Tôi thấy rằng python-command được liên kết đếnpython2.7

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

Ngay bên cạnh tôi đã tìm thấy một liên kết được gọi python3vì vậy tôi đã sử dụng nó. Bạn cũng có thể thay đổi liên kết đến python3.4. Điều đó cũng sẽ sửa nó.


1

Trong trường hợp của tôi, đó là một vấn đề với một init bị thiếu tệp .py trong mô-đun, mà tôi muốn nhập trong môi trường Python 2.7.

Python 3.3+ có các Gói không gian tên ngầm định cho phép nó tạo ra các gói mà không cần tệp init .py.


1

Nếu các câu trả lời khác được đề cập không phù hợp với bạn, hãy thử xóa bộ đệm pip của bạn và cài đặt lại gói. Máy của tôi chạy Ubuntu14.04 và nó được đặt ở dưới ~/.cache/pip. Xóa thư mục này đã giúp tôi.


1

Ngoài ra, hãy chắc chắn rằng bạn không nhầm lẫn pip3với pip. Những gì tôi tìm thấy là gói được cài đặt pipkhông hoạt động python3và ngược lại.


0

Khi bạn cài đặt qua easy_installhoặc piphoàn thành thành công? Sản lượng đầy đủ là gì? Bạn đang sử dụng cài đặt python nào? Bạn có thể cần phải sử dụng sudotrước lệnh cài đặt của mình, nếu bạn đang cài đặt các mô-đun vào thư mục hệ thống (có lẽ nếu bạn đang sử dụng cài đặt python hệ thống, có lẽ). Không có nhiều thông tin hữu ích trong câu hỏi của bạn, nhưng một số công cụ có thể sẽ giúp bao gồm:

  • echo $PYTHONPATHvà / hoặc echo $PATH: khi nhập mô-đun, Python tìm kiếm một trong các biến môi trường này (danh sách các thư mục, :được phân tách) cho mô-đun bạn muốn. Vấn đề nhập thường là do thư mục bên phải vắng mặt trong các danh sách này

  • which python, which piphoặc which easy_install: những thứ này sẽ cho bạn biết vị trí của mỗi tệp thực thi. Nó có thể giúp để biết.

  • Sử dụng virtualenv , như @JesseBriggs gợi ý. Nó hoạt động rất tốt với pipviệc giúp bạn cách ly và quản lý các mô-đun và môi trường cho các dự án Python riêng biệt.


0

Tôi đã có vấn đề chính xác này, nhưng không có câu trả lời nào ở trên có hiệu quả. Nó làm tôi phát điên cho đến khi tôi nhận thấy rằng sys.path khác sau khi tôi đã nhập từ dự án mẹ. Hóa ra tôi đã sử dụng importlib để viết một hàm nhỏ để nhập một tệp không nằm trong hệ thống phân cấp dự án. Ý tưởng tồi: Tôi quên rằng tôi đã làm điều này. Thậm chí tệ hơn, quá trình nhập bị muck với sys.path - và để nó như vậy. RấtÝ tưởng tệ.

Giải pháp là ngăn chặn điều đó, và chỉ cần đặt tệp tôi cần nhập vào dự án. Một cách tiếp cận khác là đưa tập tin vào dự án riêng của mình, vì nó cần phải được xây dựng lại theo thời gian và việc xây dựng lại có thể hoặc không trùng với việc xây dựng lại dự án chính.


0

Tôi gặp vấn đề này với 2.7 và 3.5 được cài đặt trên hệ thống của mình khi thử kiểm tra bot telegram với Python-Telegram-Bot .

Tôi không thể làm cho nó hoạt động sau khi cài đặt với pip và pip3, có sudo hoặc không. Tôi luôn luôn có:

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

Đọc thông báo lỗi chính xác cho tôi biết rằng python đang tìm trong thư mục hiện tại cho a telegram.py. Và đúng, tôi đã có một đoạn script nằm ở đó được gọi là telegram.py và nó được tải bởi python khi tôi gọiimport .

Kết luận, đảm bảo bạn không có bất kỳ package.pythư mục làm việc hiện tại nào khi cố gắng nhập. (Và đọc thông báo lỗi kỹ lưỡng).


0

Tôi gặp vấn đề tương tự (trên Windows) và nguyên nhân gốc rễ trong trường hợp của tôi là phần mềm ANTIVIRUS ! Nó có tính năng "Tự động ngăn chặn", kết thúc quá trình chạy với một loại máy ảo. Các triệu chứng là: pip install somemodulehoạt động tốt trong một cửa sổ dòng cmd và import somemodulethất bại khi được thực thi từ một quá trình khác với lỗi

ModuleNotFoundError: No module named 'somemodule'

Tôi hy vọng nó sẽ tiết kiệm thời gian cho ai đó :)


0

Có thể hơi lạc đề, nhưng tôi có vấn đề import PyYAML. Chỉ ra rằng bạn cần phải import yaml. (đoán đó là một rtfm cổ điển ...)


0

Tôi đã có một vấn đề tương tự khi sử dụng Django. Trong trường hợp của tôi, tôi có thể nhập mô-đun từ vỏ Django, nhưng không phải từ .py đã nhập mô-đun.
Vấn đề là tôi đã chạy máy chủ Django (do đó, thực thi .py) từ một virtualenv khác mà mô-đun đã được cài đặt.

Thay vào đó, phiên bản shell đã được chạy trong virtualenv chính xác. Do đó, tại sao nó làm việc.


0

Những công việc này!!!

Điều này thường xảy ra khi mô-đun được cài đặt vào phiên bản cũ hơn của python hoặc thư mục khác, không phải lo lắng vì giải pháp rất đơn giản. - nhập mô-đun từ thư mục trong đó mô-đun được cài đặt. Bạn có thể làm điều này bằng cách trước tiên nhập sysmô-đun python sau đó nhập từ đường dẫn mà mô-đun được cài đặt

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

import <module_name>

0

Hầu hết các trường hợp có thể đã được đề cập trong các giải pháp, chỉ chia sẻ trường hợp của tôi, tôi đã cài đặt một gói trong một môi trường (ví dụ X) và tôi đang nhập gói trong môi trường khác (ví dụ Y). Vì vậy, luôn đảm bảo rằng bạn đang nhập gói từ môi trường bạn đã cài đặt gói.


0

Một cái gì đó làm việc cho tôi là:

python -m pip install -user {package name}

Lệnh không yêu cầu sudo. Điều này đã được thử nghiệm trên OSX Mojave.


0

Trong trường hợp của tôi, tôi cũng phải cài đặt (các) mô-đun cho siêu người dùng.

sudo su
pip install <module>

Rõ ràng siêu người dùng không thể truy cập các tệp người dùng bình thường trong một số trường hợp nhất định.


0

Đối với tôi, nó đảm bảo phiên bản mô-đun phù hợp với phiên bản Python tôi đang sử dụng .. Tôi đã xây dựng hình ảnh trên một hộp bằng Python 3.6 và sau đó được đưa vào hình ảnh Docker có 3.7. cài đặt , rồi đập vào đầu tôi khi Python nói với tôi mô-đun chưa được cài đặt ...

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

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


pip installphiên bản phù hợp với phiên bản Python bạn đang sử dụng. Bạn gặp lỗi gì và đầu ra củapython --version
streetster

python --version cung cấp cho tôi: Python 3.7.7 và khi tôi cài đặt gói được cài đặt với pip show librosa đưa ra; Vị trí: /home/ec2-user/anaconda3/lib/python3.7/site-packages làm thế nào có nghĩa là gói hàng được đặt đúng chỗ, nhưng khi tôi nhập gói hàng đưa ra: không có tên mô-đun nào tôi đang làm việc trên AWS Sagemaker env Pytorch_p36
Walid Bousseta

có lẽ bạn muốn sử dụng pytorch_p37?
streetster

không có pytorch_p37
Walid Bousseta

0

Tôi biết đây là một bài viết siêu cũ nhưng đối với tôi, tôi đã gặp sự cố với một con trăn 32 bit và con trăn 64 bit được cài đặt. Khi tôi gỡ cài đặt con trăn 32 bit, mọi thứ sẽ hoạt động như bình thường.


0

Tôi đã giải quyết vấn đề của mình rằng các thư viện tương tự đã hoạt động tốt trong một dự án (A) nhưng việc nhập các thư viện tương tự trong dự án khác (B) gây ra lỗi. Tôi đang sử dụng Pycharm làm IDE tại HĐH Windows. Vì vậy, sau khi thử nhiều giải pháp tiềm năng và không giải quyết được vấn đề, tôi đã thực hiện hai điều này (đã xóa thư mục "Venv" và trình thông dịch được cấu hình lại):

Dự án 1-B (B), có một thư mục có tên ("venv"), nằm trong Thư viện bên ngoài /. Tôi đã xóa thư mục đó.

2-Bước 1 (xóa thư mục "venv") gây ra lỗi trong Cấu hình trình thông dịch Python và có một thông báo hiển thị ở trên màn hình có nội dung "Trình thông dịch python không hợp lệ được chọn cho dự án" và "cấu hình trình thông dịch python", chọn liên kết đó và nó mở một cửa sổ mới. Trong danh sách thả xuống "Trình thông dịch dự án", có một dòng màu Đỏ hiển thị trình thông dịch không hợp lệ trước đó. Bây giờ, Mở danh sách này và chọn Trình thông dịch Python (trong trường hợp của tôi, đó là Python 3.7). Nhấn "Áp dụng" và "OK" ở phía dưới và bạn sẽ thấy ổn.

Lưu ý: Đây có thể là vấn đề trong đó Môi trường ảo của Dự án (B) của tôi không nhận ra các thư viện đã được cài đặt và đang hoạt động.


0

Nếu bạn đang sử dụng môi trường ảo, hãy sử dụng pipenv install <module name>thay vìpip install <module name>

Đã làm cho tôi.


Không tìm thấy pipenv
Walid Bousseta

0

Có vấn đề này quá .. gói đã được cài đặt trên Python 3.8.0 nhưng Mã VS đang chạy tập lệnh của tôi bằng phiên bản cũ hơn (3.4)

sửa chữa trong thiết bị đầu cuối:

py .py

Đảm bảo bạn đang cài đặt gói trên Phiên bản Python phù hợp


0

Như một người bạn đã làm cho tôi hôm nay, đây là những gì đã giúp tôi (tôi đang sử dụng Windows):

Nhấn 'Cài đặt' -> 'Dự án' -> 'Trình thông dịch dự án'. Ở đây trong cửa sổ bên phải, có một dòng với tiêu đề 'Thông dịch viên dự án' ở bên trái. Nhấp vào dòng này và nó sẽ mở ra một số dòng bổ sung.

Bây giờ hãy nhấn dòng 'Hiển thị tất cả'. Một cửa sổ sẽ mở ra. Trong cửa sổ này, nhấn dấu '+' nhỏ ở góc trên bên phải.

Một cửa sổ mới sẽ mở ra. Ở bên trái có 4 tab, nhấn nút trên cùng, có chữ 'Môi trường Virtualenv'. Bây giờ, trong cửa sổ bên phải, đánh dấu tùy chọn 'Môi trường hiện tại'. Dòng 'Thông dịch viên' sẽ trở nên rõ ràng. Nhấn nút '...' ở bên phải của dòng.

Bây giờ, một cửa sổ duyệt sẽ mở ra. Duyệt đến thư mục mà bạn đã cài đặt Python vào . Không phải là một với PyCharm. Khi bạn đến đó, chọn tệp 'python.exe' và nhấn OK (cửa sổ sẽ biến mất).

Nhấn OK lần nữa (cửa sổ này cũng sẽ biến mất).

Bây giờ trong cửa sổ này, đảm bảo dòng mới bạn tạo được đánh dấu và nhấn OK lần nữa.

Bây giờ, tất cả các gói đã cài đặt sẽ hiển thị trong trình thông dịch dự án và được chương trình của bạn đọc.


0

Giải pháp đơn giản nhất có hiệu quả với tôi mà tôi không thấy được đề cập trong chủ đề này:

Tôi đã cài đặt nhiều phiên bản Python nhưng đang cố sử dụng Python3.7 - vì vậy tôi phải sử dụng:

sudo pip3.7 install <package>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.