Pylint lỗi "nhập chưa được giải quyết" trong Visual Studio Code


128

Tôi đang sử dụng thiết lập sau

  • macOS v10.14 (Mojave)
  • Python 3.7.1
  • Mã Visual Studio 1.30
  • Pylint 2.2.2
  • Django 2.1.4

Tôi muốn sử dụng linting để làm cho cuộc sống của tôi dễ dàng hơn một chút trong Visual Studio Code. Tuy nhiên, đối với mỗi lần nhập tôi có trạng thái "nhập chưa được giải quyết". Ngay cả khi nhập Django mặc định (tức là từ các mô hình nhập django.db).

Tôi cho rằng đó là vì nó không nhìn thấy các tệp Python trong môi trường ảo.

Mọi thứ hoạt động tốt, nhưng nó bắt đầu trở nên khó chịu.

Các lựa chọn thông dịch viên mà tôi có đều là các phiên bản hệ thống của Python. Dường như không nhìn thấy Python trong môi trường ảo của tôi (nó không nằm trong cùng thư mục với không gian làm việc của tôi, vì vậy phần đó có ý nghĩa).

Nếu tôi thiết lập python.PythonPath trong tệp settings.json , nó chỉ bỏ qua nó và không liệt kê đường dẫn môi trường ảo của tôi như một tùy chọn. Tôi cũng đã thử thiết lập nó trong cài đặt Python toàn cầu của mình, nhưng nó cũng không hiển thị.

Có cách nào khắc phục nhanh để nó hoạt động không?


2
pip install pylint-django, sau đó trong cài đặt mã so với thêm điều này:"python.linting.pylintArgs": [ "--load-plugins=pylint_django", ],
Vaibhav Vishal

@VaibhavVishal rất tiếc, tôi vẫn nhận được kết quả tương tự (đã thêm nó vào tệp settings.json của tôi)
jAC 27/1218

2
Nó thực sự là một sự cố VScode phát hiện gói nhập rất muộn, sau khi khởi động lại, nó sẽ được khắc phục tự động.
Anupam Haldkar

Câu trả lời:


107

Trong cài đặt không gian làm việc của mình , bạn có thể đặt đường dẫn Python của mình như sau:

{
    "python.pythonPath": "/path/to/your/venv/bin/python",
}

28
Loại công việc này. Đối với nhập cụ thể Python, nó giải quyết những điều đó ngay bây giờ nhưng không phải mô hình của riêng tôi (tức là "từ người dùng nhập khẩu mô hình. Người dùng" vẫn nói rằng nó không thể giải quyết nó). Suy nghĩ về điều đó?
jAC

7
Không chắc. Vui lòng thử tải lại cửa sổ của mã vs (từ shell, code <project_directory> -r) hoặc chỉ cần khởi động lại vscode.
ruddra

5
Tôi không chắc, đôi khi nó có thể xảy ra nếu thư mục không gian làm việc không được đặt đúng cách. Vui lòng đảm bảo manage.pylà trong thư mục gốc của workspace. Ngoài ra, vui lòng đảm bảo
giàn hỏa

3
bạn thiên tài! Đó là vì không gian làm việc của tôi không bắt đầu ở cấp cơ sở của dự án. Sau khi tôi điều chỉnh rằng nó bắt đầu hoạt động. Cám ơn rất nhiều!
jAC

1
Cám ơn rất nhiều! Đã giúp tôi vượt qua một vấn đề lâu đời!

196

Câu trả lời được chấp nhận sẽ không sửa được lỗi khi nhập các mô-đun riêng.

Sử dụng cài đặt sau trong cài đặt không gian làm việc của bạn .vscode/settings.json:

"python.autoComplete.extraPaths": ["./path-to-your-code"],

Tham khảo: Khắc phục sự cố, Cảnh báo nhập chưa được giải quyết


4
Tôi có một không gian làm việc hỗn hợp, tất cả mã python đều nằm trong một thư mục con. Thêm .vscode trong thư mục con sẽ không hoạt động, đây là giải pháp hoạt động duy nhất.
daisy

1
câu trả lời tốt nhất cho vscode settings.json. (nếu sử dụng workspace.xml, câu trả lời được chấp nhận có thể là cách để đi, nhưng không thể nói chắc chắn. Tôi cũng đang sử dụng không gian làm việc hỗn hợp) rất cảm ơn giải pháp.
Không có

3
Đây sẽ là câu trả lời.
Richard Li

1
Điều này đã làm việc cho tôi! Liên kết tham khảo giải thích hoàn hảo. TL; DR; Đối với các tập lệnh cục bộ do người dùng tạo trong các thư mục con, cài đặt trên giúp trình thông dịch python nhận ra thư mục con là không gian làm việc của chính nó. Sau đó, nhận dạng các tập lệnh trong không gian làm việc và giải quyết việc nhập khi toàn bộ mô-đun hoặc các phương thức riêng lẻ được nhập.
Avid Programmer

3
Xin chào tất cả mọi người! Tôi nhận thấy rằng ["./path-to-your-code"] có thể là ["./**"] trong bất kỳ trường hợp nào mà dấu sao đôi có nghĩa là bất kỳ thư mục con nào trong thư mục gốc! Đây là một giải pháp đơn giản hơn.
alan23273850 Ngày

59

Cách khác: sử dụng giao diện lệnh!

Cmd/ Ctrl+ Shift+ PPython: Chọn Trình thông dịch → chọn Trình thông dịch với các gói bạn tìm kiếm:

Nhập mô tả hình ảnh tại đây


2
trong trường hợp của tôi, điều này không hoạt động nhưng hy vọng nó sẽ giúp những người khác với vấn đề này.
jAC

vâng, đó là tinh thần, nó không phải là một giải pháp phức tạp, đó là những gì đã xảy ra với tôi :)
ted

Điều này đã làm việc cho tôi. Trong trường hợp bất kỳ ai vẫn còn băn khoăn vào năm 2019
Safder

@Safder không dành cho tôi. sử dụng virtualenv
dillon.harless

38

Vấn đề này đã được mở trên GitHub:

Vấn đề nhập chưa được giải quyết trong Python # 3840

Có hai câu trả lời rất hữu ích, của MagnuesBrzenk và SpenHouet.

Giải pháp tốt nhất lúc này là tạo tệp .env trong thư mục gốc dự án của bạn. Sau đó thêm PYTHONPATH vào nó như sau:

PYTHONPATH=YOUR/MODULES/PATH

Và trong settings.json của bạn, hãy thêm:

"python.envFile": ".env"

5
Cảm ơn, điều đó hoạt động hoàn hảo! "${workspaceFolder}/.env" PYTHONPATH=FolderName
KowaiiNeko

1
Đã xảy ra sự cố phổ biến với các cài đặt có thể chỉnh sửa khi sử dụng Máy chủ ngôn ngữ Python của Microsoft. Tuy nhiên, có vẻ như hiện tại sau bản sửa lỗi mới được mô tả tại đây: github.com/microsoft/python-language-server/issues/…, sự cố đã được khắc phục và có thể thêm bất kỳ lần nhập nào bằng ExtraPaths. Nhìn vào xử lý sự cố này để được giúp đỡ nhiều hơn nữa: github.com/microsoft/python-language-server/blob/master/...
Tomasz Chudzik

Cảm ơn @TomaszChudzik - Cài đặt: "python.autoComplete.extraPaths": ["./src"] đã hoạt động như một sự quyến rũ!
Robert

Một giải pháp khác là thêm các mô-đun codebase của bạn vào virtualenv ( add2virtualenv YOUR/MODULES/PATHví dụ: sử dụng ) và chọn virtualenv này làm trình thông dịch python của bạn.
Antwan

20

Nếu bạn có mã này trong settings.jsontệp của mình , hãy xóa nó:

{
    "python.jediEnabled": false
}

31
Tốt hơn là thêm một chút giải thích.
Tiw

1
Chỉnh sửa dòng này là một thay đổi lớn trong dự án của bạn. Dòng: "python.jediEnabled": false vô hiệu hóa máy chủ ngôn ngữ cũ và bật Máy chủ ngôn ngữ Microsoft Python mới. Hãy xem tại đây: github.com/Microsoft/vscode-python/issues/2177 Tôi nghĩ đơn giản hơn nhiều khi chỉ cần thêm các phụ thuộc cần thiết vào envFile của chúng ta. Nó được mô tả trong một câu trả lời khác. Với Máy chủ ngôn ngữ Microsoft Python, intellisense hoạt động tốt hơn nhiều đối với tôi.
Tomasz Chudzik

Đối với tôi thì ngược lại, việc kích hoạt jedi trong settings.json phù hợp với tôi. Xem thêm tại đây, stackoverflow.com/a/57269144/2877493
nairb,

@Tiw đặc biệt vì một câu trả lời khác cho thấy điều ngược lại.
Neinstein



15

Nếu bạn trực quan hơn như tôi, bạn có thể sử dụng cấu hình Mã Visual Studio trong menu TệpTùy chọnCài đặt ( Ctrl+ ,). Đi tới Phần mở rộngPython .

Trong phần Phân tích: Đã bị vô hiệu hóa , hãy thêm phần chặn thông báo sau unresolved-import:

Cài đặt Visual Studio Code


3
Việc nhập khẩu chưa được giải quyết cho nhập khẩu tương đối rõ ràng là không chính xác, điều này sẽ loại bỏ nó.
Satya Mishra

9

Bạn cần chọn trình thông dịch liên kết với môi trường ảo.

Nhập mô tả hình ảnh tại đây

Nhấp vào đây (ở thanh trạng thái dưới cùng):

Nhập mô tả hình ảnh tại đây

Và chỉ cần chọn môi trường ảo mà bạn đang làm việc. Làm xong.

Đôi khi, ngay cả khi đã chọn thông dịch viên, nó sẽ không hoạt động. Chỉ cần lặp lại quá trình một lần nữa và nó sẽ giải quyết nó.

Nhập mô tả hình ảnh tại đây


1
Đây chính xác là vấn đề của tôi (trên mac) và việc chọn trình thông dịch phù hợp đã giải quyết được nó. Cảm ơn!
Mahm00d

7

Không có giải pháp nào hoạt động ngoại trừ giải pháp này. Thay thế "Pylance" hoặc "Microsoft" trong settings.json đã giải quyết được vấn đề của tôi.

"python.languageServer": "Jedi"

6

Tôi tự hỏi có bao nhiêu giải pháp cho vấn đề này (hoặc chưa), tôi đã thử hầu hết các cách trên, không có gì hiệu quả, giải pháp duy nhất hoạt động là đặt máy chủ ngôn ngữ python thành Jedi, thay vì Microsoft trong tệp settings.json:

"python.languageServer": "Jedi"

4

Không có câu trả lời nào trước đây phù hợp với tôi. Tuy nhiên, việc thêm cả hai dòng bên dưới vào tệp settings.json của tôi .

"python.analysis.disabled": [
    "unresolved-import"
],
"python.linting.pylintArgs": ["--load-plugin","pylint_protobuf"]

Dòng đầu tiên thực sự chỉ ẩn lỗi in linting. Chắc chắn không phải là một giải pháp lâu dài, nhưng loại bỏ lộn xộn màn hình.

Câu trả lời này cho tôi dòng thứ hai: VS Code PyLint Error E0602 (biến không xác định) với Cấu trúc Python được biên dịch ProtoBuf

Có lẽ ai đó hiểu Python hơn tôi có thể giải thích thêm điều đó.


4

Giải pháp của tôi

Giải pháp này chỉ dành cho dự án hiện tại.

  1. Trong thư mục gốc của dự án, hãy tạo .vscode

  2. Sau đó tạo tệp .vscode/settings.json

  3. Trong tệp setting.json, hãy thêm dòng (dòng này dành cho Python 3)

    {
        "python.pythonPath": "/usr/local/bin/python3",
    }
    
  4. Đây là ví dụ cho Python 2

    {
        "python.pythonPath": "/usr/local/bin/python",
    }
    
  5. Nếu bạn không biết vị trí cài đặt Python của mình, chỉ cần chạy lệnh which pythonhoặc which python3trên thiết bị đầu cuối. Nó sẽ in vị trí Python.

  6. Ví dụ này hoạt động cho Python được pha trộn - Django.


4

Đối với tôi, vấn đề liên quan đến dự án mà tôi đang thực hiện. Tôi đã mất một lúc để tìm ra nó, vì vậy tôi hy vọng điều này sẽ giúp:

Cấu trúc thư mục gốc:

    root/
    __init__.py  # Empty

        folder/
            __init__.py # Empty

            sub_folder_b/
                my_code.py
            sub_folder_c/
                another_code.py

Trong another_code.py:

from folder.sub_folder_b import my_code.py

Điều này không kích hoạt intellisense trong Visual Studio Code, nhưng nó thực thi OK.

Mặt khác, việc thêm "root" trên đường dẫn nhập, đã làm cho intellisense hoạt động, nhưng làm tăng ModuleNotFoundError khi thực thi:

from root.folder.sub_folder_b import my_code.py

Giải pháp là xóa tệp _ init _.py bên trong thư mục "thư mục", chỉ để lại _ init _.py đặt tại /root.


3

Giải pháp từ Shinebayar G đã hoạt động, nhưng giải pháp khác này thanh lịch hơn một chút:

Đã sao chép từ Python vấn đề nhập chưa được giải quyết # 3840 :

Cho cấu trúc dự án ví dụ sau:

  • workspaceRootFolder
    • .vscode
  • ... các thư mục khác
  • codeFolder

Tôi đã làm gì để giải quyết vấn đề này:

  1. Đi vào thư mục không gian làm việc (ở đây là workspaceRootFolder) và tạo tệp .env
  2. Trong tệp .env trống này, thêm dòng PYTHONPATH = codeFolder (thay thế codeFolder bằng tên thư mục của bạn)
  3. Thêm "python.envFile": "$ {workspaceFolder} /. Env" vào settings.json
  4. Khởi động lại mã Visual Studio

2

Điều này phù hợp với tôi:

Mở bảng lệnh ( Ctrl+ Shift+P ) và chọn "Python: Chọn Trình thông dịch".

Làm điều này, bạn đặt trình thông dịch Python trong Visual Studio Code.


trong trường hợp của tôi. trình thông dịch python 2 của tôi hoạt động tốt. chỉ là con trăn 3 của tôi không có khả năng hợp tác tốt
duy nhất_coder

2

Điều đó xảy ra vì Visual Studio Code coi thư mục hiện tại của bạn là thư mục chính, thay vì xem xét thư mục chính thực tế.

Cách nhanh chóng để khắc phục là nó cung cấp đường dẫn thông dịch đến thư mục chính.

Nhấn Command+ Shift+ P(hoặc Ctrl+ Shift+P trên hầu hết các hệ thống khác).

Loại thông dịch Python

Chọn đường dẫn mà bạn đã cài đặt Python từ các tùy chọn có sẵn.


2

Thay đổi Python: Máy chủ ngôn ngữ thành 'Jedi' phù hợp với tôi. Ban đầu nó là 'Windows'.


1

Tôi có một giải pháp khác: phiên bản Visual Studio Code của tôi đã chọn virtualenv được lưu trữ trong .venv, nhưng nó đang sử dụng nhị phân Python sai. Nó đã được sử dụng .venv/bin/python3.7; sử dụng trình chuyển đổi trong thanh trạng thái màu xanh lam.

Tôi đã thay đổi nó để sử dụng .venv/bin/python và tất cả các lần nhập của tôi đã được giải quyết chính xác.

Tôi không biết Visual Studio Code đang làm gì ở hậu trường khi tôi làm điều này, cũng như không hiểu tại sao điều này lại gây ra sự cố của tôi, nhưng đối với tôi đây là một giải pháp đơn giản hơn một chút so với chỉnh sửa cài đặt không gian làm việc của tôi.


0

Trong trường hợp xảy ra lỗi Pylint, hãy cài đặt phần sau

pipenv install pylint-django

Sau đó, tạo một tệp, .pylintrc , trong thư mục gốc và viết như sau

load-plugins=pylint-django

0

Tôi đã giải quyết lỗi nhập bằng Ctrl+ Shift+ P. Nhập "Cài đặt tùy chọn" và chọn tùy chọn Tùy chọn Mở cài đặt (JSON)

Và thêm dòng "python.pythonPath": "/usr/bin/"

Vì vậy, nội dung JSON sẽ giống như sau:

{
    "python.pythonPath": "/usr/bin/"
}

Giữ các dòng cấu hình khác nếu chúng có mặt. Thao tác này sẽ nhập tất cả các mô-đun mà bạn đã cài đặt bằng PIP để tự động hoàn thành.


0

Giải pháp của tôi là mở Mã Visual Studio trong một thư mục trước đó.


Bạn hiểu "thư mục trước" là gì? Ý bạn là "thư mục mẹ" ? Hay cái gì khác?
Peter Mortensen

Tôi chỉ mở VSCode bằng bảng điều khiển trong thư mục trước dự án
Jeremias Caceres

0

Trong trường hợp của tôi, tôi đã có một chiếc Conda kích hoạt môi trường , nhưng tôi vẫn muốn các mô-đun Python cục bộ có sẵn để tự động hoàn thành, xem nhanh định nghĩa, v.v.

Tôi đã thử nhiều giải pháp như thêm danh sách các đường dẫn Python, v.v., nhưng điều cuối cùng đã giải quyết được cho tôi là tạo một liên kết tượng trưng từ Conda lib/python{your version}/site-packagestới mô-đun cục bộ của tôi.


0

Tôi có một thư viện bị lỗi khi cố gắng đưa nó vào bằng dịch vụ ngôn ngữ Jedi và hoạt động tốt khi không có nó (tức là C # một).

Thư viện là jsonslicer và nó phụ thuộc vào thư viện C bên ngoài mà tôi đã cài đặt vào /usr/local/lib . Điều đó có thể có một cái gì đó để làm với nó?

Tôi đã cài đặt dịch vụ Jedi và thư viện trong môi trường Conda của mình và sử dụng môi trường đó trong Visual Studio. Nó hoạt động tốt trong thời gian chạy và trong thiết bị đầu cuối của tôi, nhưng không phải khi kiểm tra các vấn đề trong tệp nguồn của tôi và nó hiển thị dưới dạng lỗi.


0

Trước tiên, hãy đảm bảo rằng bạn đã cài đặt plugin, nhưng có khả năng là thư mục không gian làm việc không được đặt đúng cách. Chỉ cần kiểm tra Pylint và chỉnh sửa tệp settings.json bên dưới.

{
    "python.pythonPath": "/usr/local/bin/python3",
    "git.ignoreLimitWarning": true
}

Bạn có nghĩa là gì khi "kiểm tra Pylint" ? Một hộp kiểm? Rằng nó tồn tại / được cài đặt? Thứ gì khác? Trả lời bằng cách chỉnh sửa câu trả lời của bạn , không phải ở đây trong nhận xét (và không có "Chỉnh sửa:", "Cập nhật:" hoặc tương tự).
Peter Mortensen

0

Cài đặt trình chạy mã và thêm mã bên dưới vào thư mục settings.json:

    "code-runner.executorMap": {
        "python": "python3 -u",
    }

"python": "(thực thi Python với các mô-đun hoặc đường dẫn của nó) -u",


"Người chạy mã" là gì? Bạn có thể thêm tài liệu tham khảo cho nó (bằng cách chỉnh sửa câu trả lời của bạn , không phải ở đây trong nhận xét)?
Peter Mortensen

0

Tôi đã đối mặt với vấn đề này theo ba cách. Mặc dù đối với mỗi người trong số họ một giải pháp có sẵn trong câu trả lời cho câu hỏi này, tôi chỉ nghĩ rằng hãy tổng hợp tất cả lại với nhau.

  1. Đầu tiên, tôi nhận được "Nhập chưa được giải quyết" trong khi nhập một số mô-đun và tôi nhận thấy rằng quá trình cài đặt của tôi đang diễn ra trong pip toàn cầu thay vì môi trường ảo.

    Sự cố này là do trình thông dịch Python. Bạn cần chọn trình thông dịch trong Visual Studio Code bằng Shift+ Ctrl+ Prồi nhập Select Python Interpreter. Chọn thông dịch viên venv của bạn tại đây.

  2. Vấn đề thứ hai là: Thay đổi ở trên không giải quyết được hoàn toàn vấn đề của tôi. Lần này là do tệp settings.json . Nếu bạn không có tệp settings.json trong thư mục dự án của mình, hãy tạo một tệp và thêm dòng sau vào đó:

        {
            "python.pythonPath": "apis/bin/python"
        }
    

    Về cơ bản, điều này sẽ yêu cầu Visual Studio Code sử dụng trình thông dịch Python có trong venv của bạn.

  3. Vấn đề thứ ba là khi nhập tệp hoặc mô-đun Python tùy chỉnh trong một chương trình khác. Đối với điều này, bạn cần phải hiểu cấu trúc thư mục. Vì Python trong venv nằm bên trong bin, bạn sẽ cần chỉ định thư mục của mô-đun của mình (hầu hết thời gian là thư mục ứng dụng). Trong trường hợp của tôi app,

        from app.models import setup_db
    

    Nói cách khác, nhập setup_db từ models.py nằm trong thư mục ứng dụng .


0

Nếu bạn đang sử dụng pipenvthì bạn cần chỉ định đường dẫn đến settings.jsontệp môi trường ảo của mình . Ví dụ :

{
    "python.pythonPath": 
           "/Users/username/.local/share/virtualenvs/Your-Virual-Env/bin/python"
}

Điều này có thể giúp ích.


0

Tôi gặp vấn đề tương tự với python 3.8.5 bằng cách sử dụng venv, vscode 1.48.2 Tôi đã tìm thấy giải pháp của mình. Trong (thư mục env) / lib / site-package không chứa các gói. Tôi sử dụng cài đặt này (.vscode / settings.json)

   {
        "python.autoComplete.extraPaths": [
            "./**",
        ],
        "python.pythonPath": "env\\Scripts\\python.exe",
        "python.languageServer": "Microsoft"
   }

0

Nếu ai đó tình cờ như tôi, những điều sau đây đã có hiệu quả.

Cấu trúc thư mục cũ:

awesome_code.py
__init__.py
    src/
        __init__.py
        stuff1.py
        stuff2.py

Cấu trúc mới:

awesome_code.py
    src/
        __init__.py
        stuff1.py
        stuff2.py
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.