__init__.py를 사용하여 전역 변수를 정의 할 수 있습니까?
패키지의 모든 하위 모듈에서 사용할 수있는 상수를 정의하고 싶습니다. 가장 좋은 장소는 __init__.py
루트 패키지 파일에 존재한다고 생각했습니다 . 그러나 나는 그것을 주장하는 법을 모른다. 하위 패키지가 몇 개 더 많은 하위 패키지가 가정합니다. 이 모듈에서 해당 변수에 어떻게 액세스 할 수 있습니까?
물론 그렇다고해도 좋겠습니까?
에 넣을 수 있어야합니다 __init__.py
. 이것은 항상 이루어집니다.
mypackage/__init__.py
:
MY_CONSTANT = 42
mypackage/mymodule.py
:
from mypackage import MY_CONSTANT
print "my constant is", MY_CONSTANT
그런 다음 mymodule을 가져옵니다.
>>> from mypackage import mymodule
my constant is 42
여전히 상수가있는 경우 별도의 모듈 (constants.py, config.py, ...)에 배치하고 패키지 네임 스페이스에 원하는 경우 가져 오기 오기가 합리적입니다 (아마도 모범 사례). 그들.
mypackage/__init__.py
:
from mypackage.constants import *
그럼에도 불구하고 패키지 모듈의 네임 스페이스에 상수가 자동으로 포함되지 않습니다. 패키지의 각 모듈은 여전히 mypackage
또는 상수를 명시 적으로 가져와야 mypackage.constants
합니다.
당신은 그렇게 할 수 없습니다. 상수를 각 식별 모듈의 네임 스페이스로 명시 적으로 가져와야합니다. 이를 달성하는 가장 좋은 방법은 "config"에서 상수를 정의하고 필요한 곳 어디에서나 가져 오는 것입니다.
# mypackage/config.py
MY_CONST = 17
# mypackage/main.py
from mypackage.config import *
어디에서나 전역 변수를 정의 할 수 있습니까? __builtin__
모듈을 가져 오거나 모듈의 속성을 수정하거나 추가하면 갑자기 새로운 내장 상수 나 함수가 생생합니다. 사실, 내 응용 프로그램이 gettext를 사용할 때 아무것도 가져 오지 않고 모든 모듈에서 _ () 얻습니다. 이는 해당되는 가능하지만 가능한 패키지 또는 모듈이 아닌 응용 프로그램 유형 프로젝트에 있습니다.
그리고 아무도 방법을 추천하지 않을 것입니다. 네임 스페이스에 어떤 문제가 있습니까? 고 말했다 응용 프로그램은 내가 좋아하는 사용 가능한 "글로벌"이 그래서, 버전 모듈이 version.VERSION
, version.PACKAGE_NAME
등
상수를 config.ini 파일을 사용하여 configparser 라이브러리를 사용하여 펼쳐 펼치고 싶었습니다. 이런 식으로 여러 상황에서 상수를 사용할 수 있습니다. 예를 들어 두 개의 고유 URL 요청에 대한 요청 변수 상수가있는 경우 다음과 같이 레이블을 지정하십시오.
mymodule/config.ini
[request0]
conn = 'admin@localhost'
pass = 'admin'
...
[request1]
conn = 'barney@localhost'
pass = 'dinosaur'
...
상당히 웹 사이트의 문서가 매우 유용하다는 것을 알았습니다. 2와 3 사이에 차이점이 존재하지 않습니다.
Python 3의 경우 : https://docs.python.org/3/library/configparser.html#module-configparser
Python 2의 경우 : https://docs.python.org/2/library/configparser.html#module-configparser
참고 URL : https://stackoverflow.com/questions/1383239/can-i-use-init-py-to-define-global-variables
'IT' 카테고리의 다른 글
장고에서 말하는 것을 설정하는 방법? (0) | 2020.08.02 |
---|---|
모든 이스케이프 문자는 무엇입니까? (0) | 2020.08.02 |
힘내 : 병합되지 않은 변경 사항을 git에 모든 변경 사항. (0) | 2020.08.02 |
"jarfile에 액세스 할 수 없습니다"오류의 원인은 무엇입니까? (0) | 2020.08.02 |
CI 플랫폼 (Hudson)을 통해 C # 어셈블리 버전을 어떻게 자동으로 증가시킬 수 있습니까? (0) | 2020.08.02 |