2016-08-12 4 views
3

파이썬 패키지 버전 관리를 재구성하려고하므로 한 버전, 한 번에 파이썬 모듈 또는 텍스트 파일 만 업데이트하면됩니다. 모든 곳에서 나는 내 버전이 필요하다. 소스 from mypkg import __version__에서로드하거나 최소한 텍스트 파일로 파싱한다. 그래도 내 conda meta.yaml 파일로 할 수있는 방법을 찾을 수 없습니다. meta.yaml 파일의 외부 소스에서 버전을로드 할 수 있습니까?소스 파일에서 conda meta.yaml의 패키지 버전을 얻으십시오.

나는 자식 환경 변수가 있다는 것을 알고 있지만, 로컬 conda 저장소를 통해 테스트 한 모든 알파/베타/rc 커밋에 태그를 추가하고 싶지는 않습니다. pyyaml에서 !!python/object을 사용하여 파이썬 객체를로드 할 수 있지만 conda는 임의의 파이썬 실행을 지원하지 않습니다. 다른 jinja2 기능을 사용하는 방법이 보이지 않습니다. 두 개 이상의 버전에서 버전 번호를 업데이트하는 스크립트를 작성할 수도 있었지만 실제로는 하나의 파일 만 최종 버전 번호로 수정하려고했습니다. 어떤 도움을 주셔서 감사합니다.

+0

더 나은 답변을 얻으려면 다음과 같은 사람이 필요합니다. git 태그 * 및 *에 대한 정정을 마쳤습니다. setup.py에 일부 명령을 추가하여 일부 패키지 도구에서 버전을 부딪혔습니다. m (Inno Setup for Windows), 나의 'version.py'를 사용하고, 커밋과 태그를 필요로했다. – daveydave400

답변

1

끝점에 도달하는 데는 여러 가지 방법이 있습니다. 여기에 콘도 자체가 무엇입니까?

콘돔의 버전 정보는 __version__conda/__init__.py입니다. 그것은 프로그래밍 방식으로 파이썬 코드 내에서 from conda import __version__으로로드 할 수 있습니다. 또한 setup.pyhere (참고 this code도 있음)에 하드 와이어되어 있으므로 명령 줄 python setup.py --version에서 해당 정보를 얻을 수있는 표준 방법입니다. 진리의 우리의 소스를 사용하여 내장 패키지의 버전을 설정합니다 build.sh에 선

$PYTHON setup.py --version > __conda_version__.txt 

퍼팅 CONDA 빌드의 1.x에서 버전의

. __conda_version__.txt 파일은 더 이상 사용되지 않으며이며 conda-build 2.0 릴리스로 제거 될 가능성이 큽니다. 최신 버전의 conda-build에서 이것을 수행하는 가장 좋은 방법은 을 jinja2 컨텍스트에서 사용하는 것입니다. 그러면 setup.py의 모든 메타 데이터에 액세스 할 수 있습니다. 특히, meta.yaml 파일에, 우리는 당신 see in the source codeauxlib.packaging.get_version()를 호출 무엇 ...

__version__ 변수가 conda/__init__.py에 설정 방법이

package: 
    name: conda 
    version: "{{ load_setup_py_data().version }}" 
이제

, 같은이있을 것이다 기능. 이 기능은

  1. 파일 conda/.version 먼저 찾아 위해 다음과 같은 작업을 수행하고, 버전 식별자로 내용을 반환 찾을 경우
  2. VERSION 환경 변수에 대한보고, 설정하면하면 버전으로 값을 반환
  3. 상기 수율 중에 버전 식별자를 반환하지 않는 경우 식별자
  4. git describe --tags 출력에서 ​​최종보고, 가능한 버전 ID를 반환 (기타 등 자식이 설치되어 있어야하는 자식 REPO이어야) None

마지막 트릭이 하나 더 있습니다. 콘도의 setup.py file에서 및 sdist에 대해 을 auxlib.packaging에서 제공하는 것으로 설정합니다.기본적으로 우리는 __version__ 변수가 하드 코딩 된 문자열로 문자 그래서

from auxlib import packaging 
setup(
    cmdclass={ 
     'build_py': packaging.BuildPyCommand, 
     'sdist': packaging.SDistCommand, 
    } 
) 

이 특별한 명령 클래스가 실제로 내장/설치된 패키지의 conda/__init__.py 파일을 수정해야하고, auxlib.packaging.get_version() 기능을 사용하지 않습니다. 귀하의 경우에는


모든 릴리스에 태그를 원하지 않는, 당신은 위의 모든 사용할 수 있으며, 명령 줄에서 VERSION 환경 변수를 사용하여 버전을 설정합니다. 당신의 build 섹션 meta.yaml 조리법에서

VERSION=1.0.0alpha1 conda build conda.recipe 

같은 것을, 당신은 빌드 환경에있는 모든 방법을 통해 VERSION 환경 변수를 전달하는 CONDA 빌드를 말할 script_env 키를 추가해야합니다.

build: 
    script_env: 
    - VERSION 
+0

나는이 예제가 https://github.com/conda/conda-build/tree/master/tests/test-recipes/metadata/source_setup_py_data에 있으며이 방법은 버전을 설정하는 방법과 함께 작동한다고 덧붙인다. setup.py - versioneer, setuptools - scm, 또는 뭐든간에. 또한 load_setup_py_data는 load_setuptools라는 이름이었습니다. 이것은 1.21.12에서 바뀌었다. 두 이름 모두 현재 유효하지만 load_setuptools는 더 이상 사용되지 않을 것이라는 경고 메시지를 출력합니다. – msarahan

+0

굉장합니다. PR에 의해'load_setup_py_data'에 대한 판단으로 이것은 매우 오래 동안 (적어도 지금은 명명 된대로) 사용할 수 없었던 것처럼 보입니다. 도움을 주셔서 감사합니다, 나는 오늘 그것을 밖으로 시도 할 것이다. ...주의를 기울이고있는 동안, 아나콘다 패키지의 버그 리포트 (seg faults 등)가'conda/conda' 또는'ContinuumIO/anaconda-recipes'에 들어가야합니까? – daveydave400

+0

패키지에 대한 버그 리포트는 대개 ContinuumIO/anaconda- issues로 이동해야합니다. 레시피를 구체적으로 개선 한 경우 ContinuumIO/anaconda-recipes에 PR 또는 문제를 제출하십시오. conda/conda는 특히 conda 관련 문제인 패키지 관리 도구입니다. – msarahan

관련 문제