2017-01-19 4 views
3

나는 메타는Python 프로젝트에 메타 정보 (__version__ 등)를 넣을 위치는 어디입니까?

__author__ = 'John Doe' 
__author_email__ = '[email protected]' 
__version__ = '1.2.3' 
# [...] 
내가하고 싶다

을 가지고는 __init__.py 파일 import의 실제 코드를 잔뜩 포함

superproject/ 
    -> __init__.py 
    -> meta.py 
setup.py 

디렉토리 구조와 약간 Python2/3 프로젝트가 setup.py (간단 : 단지 import superproject.meta)와 superproject에 사용 가능한 메타 정보는

import superproject 
print(superproject.__version__) 

나는 후자의 요구 사항으로 고심하고있다. __init__.py

from .meta import * 

을 수행 할 때, 나는 단지 예를 들어

print(superproject.meta.__version__) 

을 할 수 있습니다. 내가 setup.pyimport superproject해야 할 것 때문에 내가 직접 __init__.py에 메타 정보를 넣을 수 없습니다,

주 및 superproject의 수많은 import 의존성은 아직 사용할 수 없습니다.

힌트가 있습니까?

+1

이 명백하게 다루기 어려운 문제에 대한 추가 옵션 : https://packaging.python.org/single_source_version/ – jwodder

+0

@jwodder 내가 찾고있는 것. 이 질문을 답으로 올리면 해결책으로 표시하게되어 기쁩니다. –

+0

[bumpversion] (https://pypi.python.org/pypi/bumpversion) – user25064

답변

1

이 알려진 문제이며 파이썬 소프트웨어 재단은 그것에 대해 전체 기사를이 같이

: Single-sourcing the Project Version.

나는 모든 제안을 가지고 놀았고 결국 다음 해결책을 결정했습니다.

  1. __init__.pymeta.py 그것을 __about__.py에와 from ... import ...의 이름을 바꿉니다.
  2. setup.py에서 exec__about__.py을 사전에 입력하고 해당 정보를 사용하십시오.

모든 메타 정보는 superproject.__about__.__version__superproject.__version__으로 제공됩니다. 또한 이것은 다른 서브 모듈의 import 메타 정보를 superproject으로 쉽게 만듭니다.

setup.py에 약간의 복잡성이 추가되지만 실제 프로젝트 코드는 크게 변경되지 않습니다. 나는 원격으로 유지 보수 할 수있는 한 얼마나 복잡한 지 setup.py이 진짜로 신경 쓰지 않는다.

0

당신은

import importlib 

meta = importlib.import_module ("mod.meta") 
print (meta.__author__) 
+1

조금 더 장황하게 표현할 수 있습니까? 나는 이것이 어떻게 도움이되는지 이해하지 못한다. –

+0

당신이 setup.py에 관심이 있다고 생각했기 때문에이 스 니펫이 거기에 속해 있습니다. 나머지 프로젝트에서 메타 데이터에 액세스해야합니까? –

+0

그게 좋겠지 만 엄격한 요구 사항은 아닙니다. –

0

당신은 프로젝트 루트에있는 파일에서이 읽을 수 할 수 있습니다. 이 파일을 data_files에 넣고 setup.pydocs에 넣으십시오. JSON은 아마도 가장 쉬운 형식 일 것입니다.

superproject/ 
    -> __init__.py 
setup.py 
meta.json 
+0

'superproject .__ version__'으로 정보를 설치하는 방법은? –

+0

json 파일을 읽고 변수를 설정하려면 setup.py 파일에서 같은 작업을 수행하십시오. – user25064

관련 문제