为什么不是';下面的Python脚本是否使用pip安装库?

为什么不是';下面的Python脚本是否使用pip安装库?,python,django,Python,Django,我正试图用下面的脚本在Django中自动创建一个项目 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.

我正试图用下面的脚本在Django中自动创建一个项目

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
,从
venv
中启动python并导入pytz时,它无法加载它。我做错了什么?

pip.main没有在虚拟环境的上下文中执行,而是尝试在您的系统发行版中安装pytz。这就是为什么您会收到消息说它已经安装。可以使用subprocess.call指定要使用的pip

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'])