如何以编程方式在virtualenv中安装Python模块?

问题描述 投票:2回答:1

在我获得投票之前,这不是重复的。谷歌和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中安装软件包?

python pip virtualenv
1个回答
2
投票

听起来你的脚本调用了错误的pip,尽管你正在激活它。您可以在虚拟环境中显式调用pip(即使没有激活它):

subprocess.call('{venv_folder}/bin/pip install {item}')

但实际上并没有这样做,因为如果你有一个文件中的需求列表,你应该调用:

subprocess.call('{venv_folder}/bin/pip install -r {filename}')

...当然,在这种情况下,您无需打开需求文件并自行迭代。

注意:对于Windows系统,将bin替换为Scripts

© www.soinside.com 2019 - 2024. All rights reserved.