2017-12-22 9 views
3

Pylint을 행복하게하는 방법에 대해 설명합니다. 이것은 백만 달러짜리 질문 인 것처럼 보이며 어디서나 답변되었습니다. 그러나 나는 실제로 일이 어떻게 이루어져야하는지 잘 이해할 수는 없다. 인터넷에 대한 답변이 많이 다릅니다. 이것이 거의 중복 답변이라면 미리 미안합니다. 좋은 독서 자료에 대한 언급을 정말로 고맙게 생각합니다.Python3 - 제대로 절대 수입을하고 내가 파이썬 3 개 수입을 이해하려고 노력 거대한 문제 (I 파이썬 3.5을 사용하고 있습니다) 데

/my_project/main.py 
/my_project/lib/__init__.py 
/my project/lib/my_lib.py 

가능하다면, 나는 싶습니다 :

  • python3 main.py로 내 프로그램을 실행할 수, 현재 작업 디렉토리로 my_project을 가진

    그래서 나는 다음과 같은 더미 프로젝트를 가지고있다.

  • 언제든지 PYTHONPATH을 수정하지 않습니다.
  • pylint를 행복하게 만드십시오.
  • 올바른 Python3 가져 오기를 사용하십시오.

main.py가 포함

from .lib.my_lib import foo 

if __name__ == '__main__': 
    foo() 

그리고 foo 이에 따라 해당 구성으로 lib/my_lib.py

에 정의되어, 내가 얻을 :

SystemError: Parent module '' not loaded, cannot perform relative import

내가 오류에 의해 주위에 얻을 수 있습니다 다음과 같이 가져 오기 :

from lib.my_lib import foo 

그렇다면 1) 이것은 Python3 절대 가져 오기가 아닙니다. 맞습니까? 2) Pylint는 불평 : 나는 시도 Unable to import 'lib.my_lib' (import-error)

다음 것은이 같은 my_project/__init__.py를 추가하고 가져 오는 것입니다 :

from my_project.lib.my_lib import foo 

을 pylint이 행복이 경우하지만 나뿐만 실행할 수 없습니다 : python3 main.py을 : ImportError: No module named 'my_project'

그럼 내가 그것을 실행할 수있는 유일한 방법은 모듈로 상위 디렉토리에서입니다 : python3 -m my_project.main.

그래서 내 질문은 : 그것은 여전히 ​​python3 main.py로 실행할 수있는 반면, 올바른 방법으로 수입을 할 모든 가능한입니까?

고맙습니다.

+0

'from lib.my_lib import foo' * is is absolute import : 현재 작업 디렉토리는 자동으로 첫 번째 디렉토리 인'sys.path'에 있습니다. – Evert

+0

좀 더 정확하고 정확하게하려면 :'sys.path'의 첫 번째 항목은 [ ""Python 인터프리터를 호출하는 데 사용 된 스크립트가 들어있는 디렉토리입니다.] (https://docs.python.org/3 /library/sys.html#sys.path). – Evert

+0

pylint에서 문제를 재현 할 수 없습니다. 가져 오기 오류가 발생하지 않습니다. – Evert

답변

0

나는 같은 것을 할 것입니다 : 당신이 foo.py에서 class Foo(object) 같은 __init__.pyclass CleverName(object) 같은 일들이 가정

/path/README 
/path/requirements.txt 
/path/cleverappname/__main__.py 
/path/cleverappname/__init__.py 
/path/cleverappname/foo.py 
/path/cleverappname/bar.py 

을 (바 같은, 당신은 아이디어를 얻었다).

__main__에서

:

from cleverappname import CleverName 
from cleverappname.foo import Foo 
from cleverappname.bar import Bar 

하지만 (즉, 그것이 무엇 때문에, 맞다)는 파이썬이 아닌 스크립트로 사용 할 필요가있다 : python3 -m clevername

Pylint 약 행복해 보인다 그.

+0

인트라 패키지 가져 오기에 상대적 가져 오기를 사용합니다. 패키지의 이름을 바꾸기로 결정한 경우 (또는 설치 한 사람이 이름을 바꾸기로 결정한 경우). – Evert

관련 문제