2012-01-21 4 views
2

나는 자동으로 장고 웹 서버 환경을 설정하는 파이썬 스크립트를 작성하고 있습니다. 스크립트에서 새로 설치된 모듈을 파이썬 스크립트로로드하십시오.

, 나는

for package in packages: 
    os.system("%s %s" % ('easy_install', package)) 

이 잘 작동 사용하여 새 모듈을 설치하고있다. 내 유일한 문제는 그래도 작동하지 않습니다

package = __import__(package) 

이를 사용하여 동일한 스크립트에서 이러한 새로 설치 패키지를 사용하도록하고, 나는 ImportError를받을 : 없음 모듈 이름 reportlab을 (예를 들어)

하는 경우 스크립트를 다시 실행하면 새로 설치된 모든 패키지가 시스템 경로에 있다고 가정하므로 스크립트가 작동합니다. 스크립트를 다시 시작하지 않고 새 모듈을 가져올 수있는 방법이 있기를 바랬습니다.

reload (sys)를 시도했지만 도움이되지 않았습니다. sys.path에 수동으로 추가하거나 os.system()을 사용하여 새로운 파이썬 스크립트를 시작하여 해킹 할 수 있지만 더 깨끗한 솔루션을 선호합니다.

답변

3

클리너 솔루션이 될 수 없습니다. 패키지를 설치하면 시스템 경로가 업데이트됩니다. 경로를 변경하거나 새로운 환경에서 작동하는 하위 스크립트를 시작해야합니다.

또한. os.system을 사용하지 마십시오. subprocess을 사용하십시오.

가장 위험한 방법은 두 가지 종류의 작업 만 수행하는 "마스터"스크립트를 사용하는 것입니다.

  1. 을 사용하여 easy_install 스크립트의 순서를 실행하십시오.

  2. 모든 easy_install 스크립트 이후에 나머지 작업을 수행하려면 subprocess.Popen을 사용하십시오. 이것은 별도의 프로세스이기 때문에 새로운 패키지가 들어있는 별도의 Python PATH를 빌드 할 수 있습니다.

관련 문제