2017-06-11 10 views
2

次のスクリプトを使用して、Djangoでプロジェクトを自動作成しようとしています。以下のPythonスクリプトがpipを使用してライブラリをインストールしていないのはなぜですか?

import os, sys, pip, virtualenv 

directory = sys.argv[1] 
if not os.path.exists(directory): 
    os.makedirs(directory) 

new_dir = os.path.join(os.getcwd(), directory) 
os.chdir(new_dir) 

if not os.path.exists('venv'): 
    os.makedirs('venv') 

venv_dir = os.path.join(os.getcwd(), "venv") 
virtualenv.create_environment(venv_dir) 
activate_script = os.path.join(venv_dir, "bin", "activate_this.py") 
execfile(activate_script, dict(__file__=activate_script)) 

pip.main(["install", "--prefix", venv_dir, "pytz"]) 

最後の行はdjangoがインストールされますが、pytzをインストールしません。 pytzが既にインストールされていると言いますが、venvを有効にすると、venvimport pytzの中からpythonを起動すると、読み込めません。私はここで間違って何をしていますか?

答えて

1

pip.mainは仮想環境のコンテキストでは実行されていませんが、pytzをシステムディストリビューションにインストールしようとします。だからあなたはそれがすでにインストールされているというメッセージを受け取ります。使用するpipを指定するには、subprocess.callを使用します。

import os, sys, virtualenv, subprocess 
directory = sys.argv[1] 
if not os.path.exists(directory): 
    os.makedirs(directory) 

new_dir = os.path.join(os.getcwd(), directory) 
os.chdir(new_dir) 

if not os.path.exists('venv'): 
    os.makedirs('venv') 

venv_dir = os.path.join(os.getcwd(), "venv") 
virtualenv.create_environment(venv_dir) 
subprocess.call(['{}/bin/pip'.format(venv_dir), 'install', 'pytz']) 
+0

ありがとうございます。今はうまくいく。 – MiniGunnR

関連する問題