programing

PyLint "가져올 수 없습니다" 오류 - PYTONPATH를 설정하는 방법

goodsources 2022. 11. 20. 12:20
반응형

PyLint "가져올 수 없습니다" 오류 - PYTONPATH를 설정하는 방법

Windows의 Wing IDE에서 PyLint를 실행하고 있습니다.프로젝트 내에 서브 디렉토리(패키지)가 있어 패키지 내에 최상위 레벨에서 모듈을 Import합니다.

__init__.py
myapp.py
one.py
subdir\
    __init__.py
    two.py

two.py 있다import one 실행시에 은, 톱 의 디렉토리로부터 「이 디렉토리」를 취득할 수 있기 때문입니다.왜냐하면 최상위 디렉토리(이 디렉토리에서myapp.py run은 Python.is run)의 Python에 .파이린트

F0401: Unable to import 'one'

이거 어떻게 고쳐야 돼요?

제가 알고 있는 선택지는 두 가지가 있습니다.

ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ)PYTHONPATH환경변수를 지정하여 모듈 위에 디렉토리를 포함합니다.

편집해 .~/.pylintrc다음과 같이 모듈 위에 디렉토리를 포함합니다.

[MASTER]
init-hook='import sys; sys.path.append("/path/to/root")'

(또는 다른 버전의 pylint에서는 init-hook에서는 [General]를 [MASTER]로 변경해야 합니다).

이 두 가지 옵션 모두 유효합니다.

에서 경로를 init-hook좋긴 한데 절대 경로를 추가해야 한다는 사실이 싫어서 프로젝트 개발자들과 이 pylintrc 파일을 공유할 수 없습니다.이 솔루션은 int 루 션 솔 은 p 대 한 로 습 좋 용 this이것하 solution사는yl path다경: me fileyl니상이를 pintrc

[MASTER]
init-hook="from pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.dirname(find_pylintrc()))"

Note that 주의:pylint.config.PYLINTRC also exists and has the same value as 또한 존재하며 와 같은 가치를 가진다.find_pylintrc().

이 문제는 venv: $ cat .vscode / settings . json 에서 pylint 경로를 설정하면 해결할 수 있습니다.

{
    "python.pythonPath": "venv/bin/python",
    "python.linting.pylintPath": "venv/bin/pylint"
}

빈 리 습 an니 do you?__init__.py파이썬의 파일 모두 모듈입니까? 가 듈 모 임 도 기 해 렉 을 file일이디 director에파리sies? know modules in both두토합 to다 the장

폴더 내에서 실행하지 않을 때의 기본 개요는 다음과 같습니다(사용하지 않았지만 pylint에서 실행했을 수 있습니다).

topdir\
  __init__.py
  functions_etc.py
  subdir\
    __init__.py
    other_functions.py

이 파이썬 통역자는 현재 디렉터리에 참조하지 않고 모듈의 절대 경로에서 실행되는 경우 다 니 지 것 듈 을 디 를 하 interpre 않 this interpreter is absolute가 be따라서 pylint가 자신의 절대 경로에서 실행 중이면 접속할 수 있습니다.functions_etc.py as ~하듯이topdir.functions_etc or 또는topdir.subdir.other_functions, () ()topdir is on the 에 있습니다.PYTHONPATH.

업데이트: 데 문제가 아닌 경우 제 닌 우 가 경 update: is problem아 not문업 the the if:이)__init__.py파일을 복사하거나 이동할 수 있습니다. 사 는 동 면 니 다 하 file, try just to or됩하 your module이 copying만 maybe또기복 moving파을일, file to try justc:\Python26\Lib\site-packages-- 추가 패키지를 넣는 일반적인 장소이며, 반드시 pythonpath에 있을 것입니다.Windows 심볼 링크 또는 이와 동등한 링크(모르겠습니다!)를 사용하는 방법을 알고 있는 경우는, 대신 사용할 수 있습니다.여기에는 더 많은 옵션이 있습니다.http://docs.python.org/install/index.html,에는 개발 코드의 사용자 레벨 디렉토리에 sys.path를 추가하는 옵션이 포함되어 있습니다.그러나 실제로는 로컬 개발 dir를 site-link-over에 심볼릭하게 링크하는 것만으로 같은 효과가 있습니다.

페이지에서 찾은 이 질문에 대한 일반적인 답변입니다. 열지 마십시오. 사이트가 버깅되었습니다.

들을 만들다.pylintrc

[MASTER]
init-hook="from pylint.config import find_pylintrc;
import os, sys; sys.path.append(os.path.dirname(find_pylintrc()))"

1) sys.path는 목록입니다.

2) sys.path가 virtualenv.path가 아닌 경우 virtualenv에서 pylint를 사용해야 하는 경우가 있습니다.

3) 이와 같이 init-hook을 사용한다(' 및 'pylint의 해석은 엄격하다'에 주의한다).

[Master]
init-hook='sys.path = ["/path/myapps/bin/", "/path/to/myapps/lib/python3.3/site-packages/", ... many paths here])'

또는

[Master]
init-hook='sys.path = list(); sys.path.append("/path/to/foo")'

..그리고.

pylint --rcfile /path/to/pylintrc /path/to/module.py

pylintrc에서 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」

[MASTER]
init-hook='import sys; sys.path.append(".")'

PyCharm IDE에서 사용할 수 있습니다.

WingIDE에서는 어떻게 동작하는지는 모르겠지만 Geany에서 PyLint를 사용하는 경우에는 외부 명령어를 다음과 같이 설정합니다.

PYTHONPATH=${PYTHONPATH}:$(dirname %d) pylint --output-format=parseable --reports=n "%f"

여기서 %f는 파일 이름이고 %d는 경로입니다.누군가에게 도움이 될 수 있다:)

안 되었다.PYTHONPATH변수를 지정하여 앱 엔진 경로를 추가합니다.에는 그냥 요.~/.bashrc파일을 작성하고 다음 행을 추가합니다.

export PYTHONPATH=$PYTHONPATH:/path/to/google_appengine_folder

제가 요.init-hook우선은, 코드 베이스 전체에서 일관되게 문제를 해결할 수 없었습니다(이유에 대해서는 확실히 알 수 없습니다.시스템 경로에 추가하면(일반적으로 좋은 생각일 수 있습니다) 문제는 해결되었습니다.

해라

if __name__ == '__main__':
    from [whatever the name of your package is] import one
else:
    import one

에서는 Python 3의 입니다.else clause would be조항은 다음과 같습니다.

from .. import one

두번째 생각으로는, 아마도 당신의 특정 문제를 해결하지 않을 것입니다.다시 생각해 보니, 이 방법으로는 문제가 해결되지 않을 수도 있습니다.나는 그 질문을 오해하고 two.py으로 실행되었다고 생각했지만, 그렇지 않습니다.질문을 오해하고 two.py이 메인 모듈로 실행되고 있다고 생각했지만 그렇지 않습니다.그리고 파이썬 2.6 법 이 python 방 려 차 고 합가않 and consid음 python져지오 importing(다니rences the를 (의without in6 26 way 2 diffeering theabsolute_import부에서__future__and 파이썬 3.6x 처리, 파이썬 2.6을 위해 이것을 해야 할 필요가 없습니다.Python 2.6에서는 이 작업을 할 필요가 없다고 생각합니다.

그래도 Python 3으로 전환하여 패키지 모듈 및 패키지 내의 스탠드아론 스크립트로 모듈을 사용할 계획이라면 다음과 같은 것을 유지하는 것이 좋습니다.

if __name__ == '__main__':
    from [whatever the name of your package is] import one   # assuming the package is in the current working directory or a subdirectory of PYTHONPATH
else:
    from .. import one

마음에.

편집: 그리고 이제 가능한 솔루션을 사용하여 실제 문제를 해결합니다.편집: 이제 실제 문제에 대한 가능한 해결책을 제시하겠습니다.plin 실 행 하 나 함 렉 를 하 토 either디 run포서에 py리는를aining your py하 cont중 from the는lint directoryintl either runone모듈( 명령줄)를 통해 Pi(:는또 put line통 py를(),령 module실할때행) when,코 runningl somewhere perhaps the줄 command the ( or명모을해듈int를 py드

import os

olddir = os.getcwd()
os.chdir([path_of_directory_containing_module_one])
import one
os.chdir(olddir)

기본적으로 PLOPPath를 사용하여 현재 작업 디렉토리가 본 적 토 렉 을 basically리 cont, working리는거만디 make디작대 theainingative fid python directory재 as업지 withdlingone.py중요한 일을 할 때를 클릭합니다.

를 (Brian)에 할 수 .init_hook할 ,, 그, 그, 그, 그, 그, 그, 그, 그, 그, 그, 습, 습, ending, ,, ending, ,, ,, ,, ,, ,.sys.path제 솔루션보다 조금 더 우아합니다.)

같은 문제가 발생하여 virtualenv에 pylint를 설치한 후 .pylintrc 파일을 프로젝트 디렉토리에 추가하고 다음 파일을 수정했습니다.

[Master]
init-hook='sys.path = list(); sys.path.append("./Lib/site-packages/")'

좋은 답을 찾았어요.pylintrc를 편집하고 마스터에 다음을 추가합니다.

init-hook="import imp, os; from pylint.config import find_pylintrc; imp.load_source('import_hook', os.path.join(os.path.dirname(find_pylintrc()), 'import_hook.py'))"

Python을 설치할 때 경로를 설정할 수 있습니다.경로가 이미 정의되어 있는 경우 VS 코드 내에서 Ctrl+Shift+P를 누르고 Python: Select Interpreter를 입력한 후 업데이트된 Python 버전을 선택합니다.상세한 것에 대하여는, https://code.visualstudio.com/docs/python/environments 를 참조해 주세요.

pylint모듈의 루트를 찾습니다.이것으로 충분합니다.

[MASTER]
init-hook=sys.path += [os.path.abspath(os.path.join(os.path.sep, *sys.argv[-1].split(os.sep)[:i])) for i, _ in enumerate(sys.argv[-1].split(os.sep)) if os.path.isdir(os.path.abspath(os.path.join(os.path.sep, *sys.argv[-1].split(os.sep)[:i], '.git')))][::-1]

module python이 ~/code/mymodule/ 톱 레벨의 하고 있습니다

~/code/mymodule/
├── .pylintrc
├── mymodule/
│   └── src.py
└── tests/
    └── test_src.py

" " " 가 추가됩니다.~/code/mymodule/ IDE 를 Import 하는가에서 실행될 수 .mymodule.srctests/test_src.py.

사용하시면 ..pylintrc대신 파이썬 모듈의 루트에 관해서는 일반적으로 git 디렉토리가 당신이 원하는 것입니다.

묻기 전에

하다를 사용해서 합니다.import sys, os; sys.path.append(...)제 답변의 형식을 정당화할 수 있는 무언가가 누락되어 있습니다.저는 보통 그런 식으로 코드를 작성하지 않지만, 이 경우 pylintrc 구성 파서와 평가자의 제한에 대처하지 못하고 있습니다.은 말 운행된다execinit_hook 콜백의 컨텍스트에서 Import를 시도하면pathlib여러 줄의 문장을 사용하거나 변수에 저장하거나 하면 작동하지 않습니다.

내 코드의 덜 역겨운 형태는 다음과 같습니다.

import os
import sys

def look_for_git_dirs(filename):
    has_git_dir = []
    filename_parts = filename.split(os.sep)
    for i, _ in enumerate(filename_parts):
        filename_part = os.path.abspath(os.path.join(os.path.sep, *filename_parts[:i]))
        if os.path.isdir(os.path.join(filename_part, '.git')):
            has_git_dir.append(filename_part)
    return has_git_dir[::-1]

# don't use .append() in case there's < 1 or > 1 matches found
sys.path += look_for_git_dirs(sys.argv[-1])

pathlib.Path(filename).parents훨씬 더 쉽게 만들 수 있었을 텐데

PR을 제출하려고 할 때 이 오류가 발생했습니다."import"가 발생하는 행과 동일한 행에 #pylint: disable=E0401을 추가합니다.

이것은 자동 테스트에 합격하는 데 도움이 됩니다.

한 가지 해결 방법은 단일 파일이 아니라 패키지 전체에 대해 PyLint를 실행하는 것입니다.어떻게든 수입 모듈을 찾을 수 있습니다.

저도 같은 문제가 있었고 답을 찾지 못했기 때문에 비슷한 문제를 가진 사람에게 도움이 되었으면 합니다.

나는 에필린트를 사용한 플라이메이크를 사용한다.기본적으로 dired 디렉토리가 python 패키지 디렉토리인지 확인하는 dired-mode-hook을 추가했습니다.그렇다면 PYTONPATH에 추가합니다.제 경우 디렉토리에 "setup.py"라는 이름의 파일이 포함되어 있다면 python 패키지로 간주합니다.

;;;;;;;;;;;;;;;;;
;; PYTHON PATH ;;
;;;;;;;;;;;;;;;;;

(defun python-expand-path ()
  "Append a directory to the PYTHONPATH."
  (interactive
   (let ((string (read-directory-name 
          "Python package directory: " 
          nil 
          'my-history)))
     (setenv "PYTHONPATH" (concat (expand-file-name string)
                  (getenv ":PYTHONPATH"))))))

(defun pythonpath-dired-mode-hook ()
  (let ((setup_py (concat default-directory "setup.py"))
    (directory (expand-file-name default-directory)))
    ;;   (if (file-exists-p setup_py)
    (if (is-python-package-directory directory)
    (let ((pythonpath (concat (getenv "PYTHONPATH") ":" 
                  (expand-file-name directory))))
      (setenv "PYTHONPATH" pythonpath)
      (message (concat "PYTHONPATH=" (getenv "PYTHONPATH")))))))

(defun is-python-package-directory (directory)
  (let ((setup_py (concat directory "setup.py")))
    (file-exists-p setup_py)))

(add-hook 'dired-mode-hook 'pythonpath-dired-mode-hook)

이게 도움이 됐으면 좋겠다.

를 「」에 입니다.sys.path이치노

VSCode를 사용하는 사용자를 위해 프로젝트의 기본 디렉토리가 있는 경우 다음과 같이 한 줄의 솔루션을 제공합니다.

[MASTER]
init-hook='base_dir="my_spider"; import sys,os,re; _re=re.search(r".+\/" + base_dir, os.getcwd()); project_dir = _re.group() if _re else os.path.join(os.getcwd(), base_dir); sys.path.append(project_dir)'

좀 더 자세히 설명하겠습니다.

  • re.search(r".+\/" + base_dir, os.getcwd()).group()합니다.

  • os.path.join(os.getcwd(), base_dir) add : : 。cwd로로 합니다.sys.path 라인


참고로 여기 내 .pylintrc:

https://gist.github.com/chuyik/f0ffc41a6948b6c87c7160151ffe8c2f

이것은 오래된 질문이지만 받아들여진 답변이 없기 때문에 제안합니다.two.py에서 import 스테이트먼트를 다음과 같이 변경합니다.

from .. import one

현재 환경(Python 3.6, pylint 2.3.1을 사용하는 VSCode)에서는 플래그가 지정된 스테이트먼트가 삭제됩니다.

먼저 VS Code로 이동하고 "ctrl + shift + p"를 누릅니다.

다음으로 settings.json을 검색합니다.

그런 다음 settings.jason 안에 다음 코드를 붙여넣습니다.나는 그 문제가 해결되기를 바란다.

{

"python.pythonPath": "venv/bin/python",
"python.linting.pylintPath": "venv/bin/pylint"

}

PYTONPATH 내부에 dir를 수동으로 추가함으로써 가능합니까?

sys.path.append(dirname)

PyCharm에서 pylint를 외부 툴로 실행하여 가상 환경에서 사용할 수 있는 방법을 찾고 있는 사람이 있다면 다음과 같이 해결했습니다.

  1. [ PyCharm ]> [ Preferences ]> [ Tools ]> [ External Tools ]에서 pylint 항목을 추가 또는 편집합니다.
  2. [ 의 [를 인터프리터 [Edit Tool Settings]서 [ Tool Settings ] p [ pylint ]를 선택합니다.$PyInterpreterDirectory$/pylint
  3. 다른 합니다.--rcfile=$ProjectFileDir$/pylintrc -r n $FileDir$
  4. 를 작음음음음음음음음음음음음음으로 설정합니다.$FileDir$

여기서 pylint를 외부 도구로 사용하면 공통 설정 파일을 사용하여 선택한 디렉토리에서 pylint를 실행하고 프로젝트에 설정되어 있는 인터프리터(virtualenv 인터프리터일 가능성이 있음)를 사용합니다.

Mac : 있는 하고 여러 vsCode를 통해 다음 경로.settings.json합니다.vsCode for 、 。

{
  "python.pythonPath": "/Users/username/opt/anaconda3/bin/python",
  "python.linting.pylintPath": "/Users/username/opt/anaconda3/bin/python"
}

Windows 를 사용하고 있는 경우:

  • 방금 생성한 가상 환경 내에서 python.exe 경로를 가져옵니다.
  • 이어야 한다Z:\YourProjectFolder\Scripts\python.exe
  • 하여 vscoode 합니다.settings.json
  • ."python.pythonPath": "Z:\\YourProjectFolder\\Scripts\\python.exe"
  • 저장하면 문제가 해결됩니다.
  • 메모: json 파일에 저장할 때 단일 백슬래시가 아닌 이중 백슬래시를 사용합니다.
{
    "python.pythonPath": "Z:\\YourProjectFolder\\Scripts\\python.exe"
}

안녕하세요, 저는 다른 디렉토리에서 패키지를 Import할 수 있었습니다.나는 단지 다음과 같이 했다.주의: VScode를 사용하고 있습니다.

Python 패키지를 만드는 절차는 매우 간단합니다. Python 패키지로 작업합니다.필요한 것은 다음과 같습니다.

  • 디렉토리를 작성하고, 패키지의 이름을 지정합니다.
  • 네 수업들을 거기에 넣어라.
  • 디렉토리에 __init_.py 파일을 만듭니다.

를 들어 Framework라는 폴더가 있는데, Framework라는 폴더 안에 __init_.py 파일을 만드는 작업입니다.

Import 중에는 이 방법으로 Import해야 합니다.->

from Framework import base

따라서 E0401 오류는 Framework는 __init_를 작성한 폴더이며 base는 Import하여 Hope it helpes에 따라 작업해야 하는 커스텀 모듈입니다.!!

이 모든 게 나한테 효과가 있어!

.pylintrc

[MASTER]
; init-hook='import sys; sys.path.append("./venv/lib/python3.8/site-packages")'

; or
init-hook='import sys; sys.path.append(f"./venv/lib/python{sys.version[:3]}/site-packages");'

; or
;init-hook='from distutils.sysconfig import get_python_lib; sys.path.append(get_python_lib())'

; or
; init-hook='import site; sys.path.append(site.getsitepackages()[0])'

vscode를 사용하는 경우 패키지 디렉토리가 _pychache_ 디렉토리 밖에 있는지 확인하십시오.

을 사용하는 Linux 삭제 문제를 했습니다.module.cpython-XXm-X-linux-gnu.so파일을 저장할 수 있습니다.

내 동네에서 잘 작동한다는 것을 알았다..pylintrc파일: (「env」):

[MASTER]
init-hook='import site; sys.path += site.getsitepackages()'

사이트 패키지에 대한 자세한 내용은 이 게시물을 참조하십시오.

됩니다..vscode/settings.json

,"python.linting.pylintPath": "venv/bin/pylint"

pylint(python의 에러 체커)의 위치를 알립니다.

언급URL : https://stackoverflow.com/questions/1899436/pylint-unable-to-import-error-how-to-set-pythonpath

반응형