Còn được gọi là lỗi (không có tên mô-đun) trong Python
Tôi thực sự hy vọng rằng lý do bạn nhận đượcModuleNotFoundError không có mô-đun nào có tênlỗi đơn giản là do mô-đun bạn đang cố đưa vào chưa được cài đặt.
Vui lòngđăng ký vào cộng đồng Python miễn phí của chúng tôi, nơi bạn có thể đặt câu hỏi và gặp gỡ những người học và nhà phát triển Python khác.
Tuy nhiên, nếu bạn làm việc trong một dự án phức tạp hơn, hoặc Python của bạn không được cấu hình đúng, bạn có thể muốn đọc phần còn lại của bài viết này để hiểu cách Python thêm các mô-đun vào chương trình của bạn. Và sau đó cố gắng giải quyết nó với kiến thức mới này.
Trong trường hợp đó, đối với những người học tốc độ trực quan, đây là video hướng dẫn cách khắc phục:
Lỗi này gặp phải đối với các mô-đun phổ biến khác. Có một hướng dẫn riêng cho mỗi @đồ dùng,mysql, jwt, docker, matplotlib, selen, pandas, pygame, tkinter, cv2,cục mịch, tensorflow, feras, request, pip, pil, api.
Nhập các mô-đun Python hoạt động như thế nào?
Để thêm một mô-đun mới, hãy sử dụngnhập khẩutừ khóa theo sau bởi tên gói:
nhập tên mô-đun
Nếu có thể tìm thấy mô-đun một cách lý tưởng thì điều này là đủ để bắt đầu sử dụng nó.
Nhưng nếu mọi thứ không ổn, bạn có thể nhận được một trong hai lỗi sau:
- ModuleNotFoundLỗi: Không có mô-đun nào có tên 'modulename'
- Nhập Lỗi: không thể nhập tên 'modulename'
Nhưng làm thế nào để Python biết tìm kiếm các mô-đun ở đâu?
Vâng, rất nhiều điều xảy ra trong một dòng. Và phải mổ xẻ một chút để hiểu.
Hãy chia nhỏ quy trình để xem Python sẽ làm gì để định vị mô-đun của bạn:
- Nó sẽ định vị tên tệp được liên kết với gói đã nhập.
- tải vàkhởi tạo(nếu cần) mô-đun.
- Thêm tên cần thiết trong không gian tên cục bộ và phạm vi chương trình hiện tại.
- Trình thông dịch Python tiếp theo sẽ cố gắng giải quyếttên mô-đun
- sys.moduleslà bản đồ từ điển mà Python sẽ sử dụng để tra cứu các tên mô-đun đã được tải (một mô-đun khác có thể đã tải nó, v.v.) và nếu vậy, nó sẽ có sẵn trong phạm vi mà bạn đang nhập nó.
- Nếu bước trước không thành công, Python sẽ sử dụngThư viện chuẩn Pythonđang nhìn. PSL chứa tất cả các mô-đun tích hợp được viết bằng ngôn ngữ C cung cấp quyền truy cập hệ thống tệp, thư viện toán học và các công cụ hệ thống khác nhau xử lý hầu hết các vấn đề phổ biến.
- Nếu bước trước đó không thành công, Python sẽ cố gắng giải quyết mô-đun bên dướisys.pathđó có thể là nơi mọi thứ đã sai khi bạn nhận đượcModuleNotFoundError không có lỗi tên mô-đun.
Cách khắc phục Lỗi ModuleNotFoundError (không có tên mô-đun)
CácModuleNotFoundError: Không có mô-đun nào có tênlỗi xuất hiện khi Python không thể tìm thấy mô-đun mà bạn đang cố nhập, tên của gói được nhập bị viết sai chính tả hoặc mô-đun không tồn tại trên ổ cứng của bạn.
Về cơ bản, tất cả điều đó có nghĩa là bạn cầncài đặt mô-đun/góitrước khi nó có thể được nhập vào chương trình của bạn (vớinhập khẩutừ khóa.)
Nhưng tất nhiên có nhiều hơn thế.
Bài viết này sẽ khám phá lỗi này sâu hơn.
Nhưng nếu nó không đơn giản thì sao?
Nếu bạn gặp lỗi nhập vì lý do phức tạp hơn, hãy xem xét cấu trúc của các thành phần phụ thuộc gói. Thông thường nó là một cái gì đó như sau. (Lưu ý rằng các gói có thể bao gồm các gói khác hoặc "gói phụ".)
└── project ├── gói │ ├── something.py └── otherpackage ├── Chicken.py ├── Rooster.py └── gói phụ └── egg.py
Đây là nơi phân biệt giữatuyệt đốiVàliên quan đếncác gói có thể quan trọng.
Ví dụ đã cho ở trên, bạn có thể sử dụng mộttuyệt đốinhập khẩu:
nhập gói.something
Một ví dụ khác về nhập khẩu tuyệt đối:
nhập otherpackage.chickennhập otherpackage.rooster
Và đây là đường dẫn tuyệt đối đến vị trí của gói contrứng:
nhập otherpackage.subpackage.eggs
MỘTnhập khẩu tương đốiphổ biến hơn rất nhiều và do đó dễ bịlỗi nhập. Dưới đây là 3 ví dụ về Pythonnhập khẩu tương đối:
# nhập từ phạm vi của something.pyfrom ..othergói nhập gà trống
from ..otherpackage nhập gàtừ ..otherpackage.chicken nhập lay_egg_function
Đây là một ví dụ khác về nhập tương đối:
# nhập từ phạm vi của chick.pytừ . gà nhập khẩu
từ .rooster nhập peck_seeds_function
Làm cách nào để sửa lỗi ModuleNotFoundError và ImportError?
Bây giờ chúng ta đã phần nào quen thuộc hơn với cách Python nhập gói và chúng ta đã xem xét cách nhập tuyệt đối và tương đối, đã đến lúc xem xét kỹ hơn về ModuleNotFoundError (và ImportError) và xem cách khắc phục lỗi này.
Trong phần lớn các trường hợp, các lỗi này xảy ra do trình thông dịch Python không giải quyết được tên mô-đun trongsys.path(nơi Python tìm kiếm sau khi tra cứu mô-đun không thành công trong cả haisys.modulesvà Thư viện tiêu chuẩn.
Sử dụngtừtừ khóa theo cùng một mô hình. Khi tra cứu không thành công, Python sẽ némModuleNotFoundLỗivìnhập khẩutừ khóa. VàNhập Lỗiđể tra cứu trong mộttừtừ khóa.
Giải pháp cuối cùng để khắc phục lỗi ModuleNotFoundError No Module Named:
Một cách để tránh lỗi nhập là tránh hoàn toàn các đường dẫn tương đối.
- Tránh sử dụng đường dẫn tương đối
- Hãy thử sử dụng đường dẫn tuyệt đối trong của bạnnhập khẩuS
- Hoặc sử dụng tích hợpPYTHONPATHbiến hệ thống:
xuất PYTHONPATH="${PYTHONPATH}:/your/project/"
Nếu bạn đang chạy ứng dụng Python của mình trong Docker hoặc Vagrant, điểm cuối cùng này có thể là chìa khóa để giải quyết hầu hết các lỗi mô-đun của bạn.
Chuyển đến bash của bạn và thực hiện lệnh sau trên dòng lệnh:
# Trên Linux/Unix/MacOS/Terminalxuất PYTHONPATH="${PYTHONPATH}:/path/to/project/"
đặt PYTHONPATH=%PYTHONPATH%;C:\path\to\project\
(Rõ ràng là thay đổi đường dẫn đến dự án của riêng bạn)
Điều này sẽ liên kết thư mục dự án của bạn vớiPYTHONPATHvà bất cứ khi nào bạn sử dụng nhập khẩu tuyệt đối, sẽ không có gì cản trở việc tránh lỗi ModuleNotFoundError.
Tôi thực sự hy vọng rằng nó không quá phức tạp trong trường hợp của bạn :)
LỗiModuleNotFoundError không có mô-đun nào có têncó thể xảy ra vì một số lý do, bao gồm tên mô-đun không chính xác, đường dẫn mô-đun không chính xác và các phụ thuộc vòng tròn ngoài ý muốn. Trong hướng dẫn này, chúng ta sẽ xem xét một số nguyên nhân phổ biến nhất gây ra lỗi này và cách khắc phục chúng.
Các mô-đun Python là gì và tại sao chúng ta cần nhập chúng?
Bạn có thể mới bắt đầu với Python. Bạn đã viết các chương trình Python cơ bản.
Để nâng cao ứng dụng của bạn, tại một thời điểm nào đó, rất có thể bạn cần bắt đầu thêm Pythonmô-đun, có thể là thư viện AI, toán học hoặc vật lý.
Bạn có thể không muốn dành thời gian viết các gói cho mình. Đơn giản vì nhiều mô-đun thực hiện đúng những gì bạn cần và thực hiện nó một cách hiệu quả.
Các mô-đun này có sẵn miễn phí. Rất may, các lập trình viên trước chúng tôi đã dành thời gian để tạo ra chúng và phân phối chúng miễn phí.
Và đây là lý do tại sao chúng ta phải nhập các mô-đun bằng Python.
Dưới đây là một số thuật ngữ và thông tin cơ bản:
- MỘTmô-đun pythonchỉ là một tập tin với.pysự mở rộng
- MỘTgói trănlà mộtthư mụcchứa ít nhất một mô-đun python. Khi nói đến việc tạo các mô-đun python của riêng bạn, một thư mục yêu cầu__init__.pyfile để nó được coi là một gói.
- MỘTgói trăncó thể chứa các gói khác (gói con)
- Bạn sẽnhập khẩumột gói khi bạn cần thêm chức năng hữu ích do người khác viết, để tiết kiệm thời gian viết ứng dụng của bạn.
Mô-đun không tồn tại (Nó chưa được cài đặt)
Một nguyên nhân phổ biến củaModuleNotFoundError: Không có mô-đun nào có tênlỗi đơn giản là mô-đun bạn đang cố nhập không tồn tại. Điều này có thể xảy ra nếu bạn viết sai chính tả tên mô-đun hoặc nếu bạn đang cố gắng nhập một mô-đun không có trong đường dẫn Python của mình.
Để khắc phục điều này, hãy đảm bảo rằng bạn đang sử dụng đúng tên mô-đun và mô-đun đó nằm trong đường dẫn Python của bạn (hoặc ít nhất là trongthư mục dự án của bạnnơi bạn đang thực hiện chính của mình.pytập tin từ.)
Phụ thuộc tròn
Một nguyên nhân phổ biến khác của lỗi này là sự phụ thuộc vòng tròn. Đó là, hai mô-đun đang cố nhập lẫn nhau. Điều này sẽ gây ra một vòng lặp vô hạn, và cuối cùng nâng caoModuleNotFoundError: Không có mô-đun nào có tênlỗi.
Để khắc phục điều này, hãy đảm bảo rằng không có phần phụ thuộc vòng tròn nào trong mã của bạn. Cuối cùng, đảm bảo rằng tất cả các mô-đun được nhập theo đúng thứ tự. Nếu một mô-đun nhập một mô-đun khác trước khi nó được khởi tạo hoàn toàn, điều này cũng có thể dẫn đếnModuleNotFoundError: Không có mô-đun nào có tênlỗi.
Các nguyên nhân khác gây ra lỗi ModuleNotFoundError (không có tên mô-đun)
Có nhiều nguyên nhân khác gây ra lỗi "ModuleNotFoundError: No module named", nhưng đây là một số nguyên nhân phổ biến nhất. Nếu bạn thấy lỗi này trong mã của mình, hãy đảm bảo kiểm tra các nguyên nhân tiềm ẩn này và khắc phục chúng cho phù hợp. Với một chút khắc phục sự cố, bạn sẽ có thể thiết lập và chạy mã của mình ngay lập tức!
Các Hướng dẫn về ModuleNotFoundError khác (không phải tất cả các mô-đun đều giống nhau!)
- Không có mô-đun có tên yêu cầu
- Không có mô-đun nào có tên pandas
- Không có mô-đun nào có tên YAML
- Không có mô-đun nào có tên CV2
- Không có mô-đun nào có tên matplotlib
- Không có mô-đun nào có tên tensorflow
- Không có mô-đun nào có tên django
- Không có mô-đun có tên mysql
- Không có mô-đun nào có tên utils
Hy vọng điều này đã giúp ai đó ngoài kia 🙂