在我获得投票之前,这不是重复的。谷歌和SO都用尽了。在SO中,有关于如何安装Python模块的问题。但我的问题是创建一个venv
并以编程方式为此创建venv
安装模块。我尝试了一些东西;
我的示例代码
def create_venv_install_requirements(venv_folder, filename):
print(f'Creating a new virtual environment')
virtualenv.create_environment(venv_folder)
activate_file = os.path.join(venv_folder, 'Scripts', 'activate_this.py')
print('Installing requirements')
with open(filename) as f:
requirements = f.readlines()
for item in requirements:
exec(open(activate_file).read(), globals())
subprocess.call(f'pip install {item}')
# pip.main('install', item) this does not work as well
我面临的问题是我可以成功创建一个venv
,但模块不能安装在创建的venv
中,而是在系统范围内安装。如何在激活的venv
中安装软件包?
听起来你的脚本调用了错误的pip
,尽管你正在激活它。您可以在虚拟环境中显式调用pip
(即使没有激活它):
subprocess.call('{venv_folder}/bin/pip install {item}')
但实际上并没有这样做,因为如果你有一个文件中的需求列表,你应该调用:
subprocess.call('{venv_folder}/bin/pip install -r {filename}')
...当然,在这种情况下,您无需打开需求文件并自行迭代。
注意:对于Windows系统,将bin
替换为Scripts