2014-07-18 5 views
10

Tox와 Conda를 함께 사용하려고합니다. 주로 비 Python 종속성이 많이 필요하므로 Conda 배포판을 만드는 것이 쉬웠습니다. 그런 다음 모든 것을 간단한 conda install으로 설치할 수 있습니다.python Tox ini 파일에서 소스를 사용할 때 오류가 발생했습니다.

그러나 콘도 환경을 활성화하는 데 문제가 있습니다.

[tox] 
envlist = py27 

[testenv] 
whitelist_externals = 
    conda 
    source 
    py.test 
setenv = 
    PYTHONPATH = {toxinidir}:{toxinidir}/damlarces 
install_command = 
    python build_env.py --conda-env {toxworkdir}/conda {packages} 
commands = 
    source activate {toxworkdir}/conda 
    py.test --basetemp={envtmpdir} 

python build_env.py --conda-env {toxworkdir}/conda {packages}이 문제는 source activate {toxworkdir}/conda 라인에서 제공 등, (필요한 경우) 환경을 만들어 패키지를 설치 처리합니다. ERROR: InvocationError: could not find executable 'source' 오류가 발생합니다. 직접 명령 줄에 명령을 입력하면 정상적으로 작동합니다.

관심있는 사람들을 위해. build_env.py은이 요지입니다 : https://gist.github.com/JudoWill/70450979353fa2d12823 ... 현재 Python 종속성을 설치하고 있지만 의도 된 환경에서는 반드시 Python 라이브러리가 아닌 Conda repo를 설치하게됩니다. 의견이 있으십니까?

+0

나는 conda도 tox도 모르지만, 파이썬 스크립트를 이런 식으로 실행할 수있는 것 같기 때문에,'build_env.py'와 비슷한'source'에 그 호출을 감쌀 수있는 스크립트를 작성할 수 없습니까? –

+0

그것을 시도했다. Tox가 작동하는 방식 때문에 쉘은 실행의'install_command'와'commands' 섹션 사이에서 손실됩니다. 나는 또한 두 개의'명령들 '을 하나의 bash 스크립트로 캡슐화하려고 시도했다. 이것은 또한'InvocationError'를 제공합니다. – JudoWill

+0

'build_env.py '안에 무엇이 있는지 보여줄 수 있습니까? 감사. – alecxe

답변

7

처럼, 모든 명령에 절대 경로를 사용, 그렇지 않으면

export PATH={toxworkdir}/conda/bin:$PATH 

를 사용할 수 있습니다. 아마도 Tox의 변경에 취약 할 수 있지만, envlist에 의해 제공된 순서대로 테스트를 실행하는 한 제대로 동작해야합니다.

그의 대답에서 @asmeurer가 제안한대로, 트릭은 어떻게 든 PATH을 tox로 인식하도록 변경하는 것입니다. 하지만 conda/bin을 생성하려면 conda create을 실행해야합니다. 먼저, asmeurer가 제안한 export PATH={toxworkdir}/conda/bin:$PATH을 사용했지만, source 대신 export과 동일한 InvocationError 문제가 발생했습니다.

다음으로, setenv tox 섹션을 사용하여 경로를 변경해 보았습니다. 닭고기 & 달걀 문제가 발생했습니다. conda create 명령을 실행할 때까지 bin 디렉토리를 추가 할 수 없습니다. Tox 명령의 기본 순서로 인해 install_command 이후에 setenv이 달라 지거나 다시 실행될 수있는 것처럼 보이지 않습니다.

내가 해결할 작업은 새로운 환경을 테스트하고이 환경을 후속 테스트와 공유하는 새로운 env을 만드는 것이 었습니다.

[tox] 
envlist = setup,py27 

[testenv] 
whitelist_externals = 
    conda 
    source 
    py.test 

[testenv:setup] 
setenv = 
    PYTHONPATH = {toxinidir}:{toxinidir}/damlarces 
commands = 
    conda config --add channels judowill 
    python build_env.py --conda-env {toxworkdir}/conda {packages} 

[testenv:py27] 
setenv = 
    PYTHONPATH = {toxinidir}:{toxinidir}/damlarces 
    PATH={toxworkdir}/conda/bin:$PATH 
commands = 
    {toxworkdir}/conda/bin/py.test --basetemp={envtmpdir} 

이것은 작동합니다. 나는 이것을 다중 파이썬 환경으로 일반화하는 것이 얼마나 어려울 지 모르겠지만, 저에게는 효과적입니다.

6

source은 명령이 아닙니다. 쉘 내장입니다. source script.sh은 현재 쉘에서 script.sh이 실행되도록합니다. 이것은 activate에 필요합니다. PATH를 수정하고 쉘 자체에 영향을 미치기를 원합니다 (일반적으로 스크립트를 실행할 때 호출 쉘 환경에 영향을 줄 수없는 자체 환경이있는 서브 쉘에서 실행됩니다) .

tox가 명령에서 환경 변수 설정을 지원하는지 잘 모릅니다. 그렇다면, 당신은 단지 그냥이 해결 방법 알아 냈 땜질을 충분히 한 후

{toxworkdir}/conda/bin/py.test --basetemp={envtmpdir} 
+1

프로그램을 실행 한 후에 경로가 재설정됩니까? – JudoWill

+0

'PATH'는 로컬에서만 독점으로 설정됩니다. 프로그램 또는 스크립트에서 환경 변수를 변경할 때마다 쉘이 아닌 해당 프로그램의 환경에만 영향을줍니다 (예외적으로'source'로 호출하는 bash 스크립트가있는 경우는 예외입니다). – asmeurer

+0

주사위가 없습니다. 이제'export' 명령에 대한 호출 오류가 발생합니다. 'ERROR : InvocationError : 실행 파일 'export''을 찾을 수 없습니다 – JudoWill