복붙노트

[PYTHON] virtualenv에 환경 변수 설정하기

PYTHON

virtualenv에 환경 변수 설정하기

환경 변수를 사용하여 구성을 가져 오는 Heroku 프로젝트가 있지만 먼저 virtualenv를 사용하여 로컬에서 내 응용 프로그램을 테스트합니다.

virtualenv 내에서 원격 컴퓨터에 정의 된 환경 변수를 설정하는 방법이 있습니까?

해결법

  1. ==============================

    1.2017 년 5 월 17 일부터 autoenv의 README에는 direnv가 더 나은 옵션 일 수 있으며 autoenv가 더 이상 유지되지 않음을 의미합니다.

    2017 년 5 월 17 일부터 autoenv의 README에는 direnv가 더 나은 옵션 일 수 있으며 autoenv가 더 이상 유지되지 않음을 의미합니다.

    나는 정확히 이것을하기 위해 autoenv를 썼다.

    https://github.com/kennethreitz/autoenv

  2. ==============================

    2.Virtualenvwrapper (필자는 그렇게하는 것이 좋습니다)를 사용하는 경우 $ VIRTUAL_ENV / bin /에있는 동일한 이름의 스크립트를 사용하여 다른 후크 (사전 활성화, 사후 활성화, 사전 비활성화, 사후 비활성화)를 정의 할 수 있습니다. 사후 활성화 후크가 필요합니다.

    Virtualenvwrapper (필자는 그렇게하는 것이 좋습니다)를 사용하는 경우 $ VIRTUAL_ENV / bin /에있는 동일한 이름의 스크립트를 사용하여 다른 후크 (사전 활성화, 사후 활성화, 사전 비활성화, 사후 비활성화)를 정의 할 수 있습니다. 사후 활성화 후크가 필요합니다.

    $ workon myvenv
    
    $ cat $VIRTUAL_ENV/bin/postactivate
    #!/bin/bash
    # This hook is run after this virtualenv is activated.
    export DJANGO_DEBUG=True
    export S3_KEY=mykey
    export S3_SECRET=mysecret
    
    $ echo $DJANGO_DEBUG
    True
    

    이 구성을 프로젝트 디렉토리에 보관하려면 프로젝트 디렉토리에서 $ VIRTUAL_ENV / bin / postactivate로 심볼릭 링크를 만드십시오.

    $ rm $VIRTUAL_ENV/bin/postactivate
    $ ln -s .env/postactivate $VIRTUAL_ENV/bin/postactivate
    

    mkvirtualenv를 사용할 때마다 심볼릭 링크의 생성을 자동화 할 수도 있습니다.

    이것 자체는 후에 청소하지 않는다는 것을 기억하십시오. virtualenv를 비활성화하면 환경 변수가 유지됩니다. 대칭 적으로 정리하려면 $ VIRTUAL_ENV / bin / predeactivate에 추가하면됩니다.

    $ cat $VIRTUAL_ENV/bin/predeactivate
    #!/bin/bash
    # This hook is run before this virtualenv is deactivated.
    unset DJANGO_DEBUG
    
    $ deactivate
    
    $ echo $DJANGO_DEBUG
    

    환경 변수를 이미 사용하고있는 환경 변수로 사용한다면, virtualenv를 떠날 때 설정이 완전히 해제된다는 것을 기억하십시오. 그럴 가능성이있는 경우 이전 값을 임시 어딘가에 기록한 다음 다시 비활성화 할 때 읽을 수 있습니다.

    설정:

    $ cat $VIRTUAL_ENV/bin/postactivate
    #!/bin/bash
    # This hook is run after this virtualenv is activated.
    if [[ -n $SOME_VAR ]]
    then
        export SOME_VAR_BACKUP=$SOME_VAR
    fi
    export SOME_VAR=apple
    
    $ cat $VIRTUAL_ENV/bin/predeactivate
    #!/bin/bash
    # This hook is run before this virtualenv is deactivated.
    if [[ -n $SOME_VAR_BACKUP ]]
    then
        export SOME_VAR=$SOME_VAR_BACKUP
        unset SOME_VAR_BACKUP
    else
        unset SOME_VAR
    fi
    

    테스트:

    $ echo $SOME_VAR
    banana
    
    $ workon myenv
    
    $ echo $SOME_VAR
    apple
    
    $ deactivate
    
    $ echo $SOME_VAR
    banana
    
  3. ==============================

    3.너는 시도 할 수 있었다 :

    너는 시도 할 수 있었다 :

    export ENVVAR=value
    

    virtualenv_root / bin / activate에 있습니다. 기본적으로 정품 인증 스크립트는 virtualenv를 사용하기 시작할 때 실행되는 스크립트이므로 사용자 지정 내용을 모두 저장할 수 있습니다.

  4. ==============================

    4.virtualenv 만 사용하면 (virtualenvwrapper없이) virtualenv를 활성화하기 위해 소싱하는 활성화 스크립트를 통해 환경 변수를 쉽게 설정할 수 있습니다.

    virtualenv 만 사용하면 (virtualenvwrapper없이) virtualenv를 활성화하기 위해 소싱하는 활성화 스크립트를 통해 환경 변수를 쉽게 설정할 수 있습니다.

    운영:

    nano YOUR_ENV/bin/activate
    

    다음과 같이 환경 변수를 파일 끝에 추가하십시오.

    export KEY=VALUE
    

    필요하다면 Danilo Bargen이 제안한 위대한 답에서 환경 변수 설정을 해제하기 위해 유사한 훅을 설정할 수도 있습니다.

  5. ==============================

    5.여기에 좋은 답변이 많이 있지만, 두 솔루션 모두 비활성화 할 때 환경 변수 설정을 해제하고 virtualenv 이외의 추가 라이브러리는 필요하지 않음을 알 수있는 솔루션이 게시되지 않았으니 여기 내 솔루션은 편집 / bin / activate, 변수 MY_SERVER_NAME 및 MY_DATABASE_URL을 예로들 수 있습니다.

    여기에 좋은 답변이 많이 있지만, 두 솔루션 모두 비활성화 할 때 환경 변수 설정을 해제하고 virtualenv 이외의 추가 라이브러리는 필요하지 않음을 알 수있는 솔루션이 게시되지 않았으니 여기 내 솔루션은 편집 / bin / activate, 변수 MY_SERVER_NAME 및 MY_DATABASE_URL을 예로들 수 있습니다.

    activate 스크립트에서 deactivate에 대한 정의가 있어야하며 변수의 끝에서 변수를 설정 해제해야합니다.

    deactivate () {
        ...
    
        # Unset My Server's variables
        unset MY_SERVER_NAME
        unset MY_DATABASE_URL
    }
    

    그런 다음 activate 스크립트가 끝날 때 변수를 설정합니다.

    # Set My Server's variables
    export MY_SERVER_NAME="<domain for My Server>"
    export MY_DATABASE_URL="<url for database>"
    

    이렇게하면 작동시키기 위해 다른 것을 설치할 필요가 없으며 virtualenv를 비활성화 할 때 남아있는 변수로 끝나지 않습니다.

  6. ==============================

    6.로컬에서 virtualenv 내에서 이것을 테스트하는 데 사용할 수있는 두 가지 방법이 있습니다. 첫 번째는 Heroku 공구 벨트 (https://toolbelt.heroku.com/)를 통해 설치되는 도구입니다. 도구는 감독입니다. .env 파일에 로컬로 저장된 모든 환경 변수를 내 보낸 다음 Procfile 내에서 app 프로세스를 실행합니다.

    로컬에서 virtualenv 내에서 이것을 테스트하는 데 사용할 수있는 두 가지 방법이 있습니다. 첫 번째는 Heroku 공구 벨트 (https://toolbelt.heroku.com/)를 통해 설치되는 도구입니다. 도구는 감독입니다. .env 파일에 로컬로 저장된 모든 환경 변수를 내 보낸 다음 Procfile 내에서 app 프로세스를 실행합니다.

    두 번째 방법은 가벼운 방법을 찾고 있다면 .env 파일을 로컬로 가지고 다음을 실행하는 것입니다.

    export $(cat .env)
    
  7. ==============================

    7.autoenv를 다음 중 하나를 통해 설치하십시오.

    autoenv를 다음 중 하나를 통해 설치하십시오.

    $ pip install autoenv
    

    (또는)

    $ brew install autoenv
    

    그런 다음 virtualenv 프로젝트 폴더에 .env 파일을 만듭니다.

    $ echo "source bin/activate" > .env
    

    이제 모든 것이 잘됩니다.

  8. ==============================

    8.django를 위해 설계되었지만 대부분의 설정에서 작동해야하는 또 다른 방법은 django-dotenv를 사용하는 것입니다.

    django를 위해 설계되었지만 대부분의 설정에서 작동해야하는 또 다른 방법은 django-dotenv를 사용하는 것입니다.

  9. ==============================

    9.Heroku를 이미 사용하고 있다면 Foreman을 통해 서버를 실행하십시오. 그것은 .env 파일을 지원합니다.이 파일은 KEY = VAL을 가진 행들의 목록으로, 실행되기 전에 앱으로 보내질 것입니다.

    Heroku를 이미 사용하고 있다면 Foreman을 통해 서버를 실행하십시오. 그것은 .env 파일을 지원합니다.이 파일은 KEY = VAL을 가진 행들의 목록으로, 실행되기 전에 앱으로 보내질 것입니다.

  10. from https://stackoverflow.com/questions/9554087/setting-an-environment-variable-in-virtualenv by cc-by-sa and MIT license