python - 如何在 python 脚本中启动和运行 virtualenv?

标签 python virtualenv

我正在尝试创建一个虚拟环境,启动它,然后在虚拟环境中执行此后的每个命令。

    1. os.system("curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py")
    2. os.system("python3 get-pip.py")
    3. os.system("mkdir Apps")
    4. os.system("pip3 install virtualenv")
    5. os.system("virtualenv virt")
    6. os.system("source virt/bin/activate")
    7. os.system("pip3 install flask")

这是我现在拥有的代码,我正在尝试在第 (5) 行创建虚拟环境,然后尝试在第 (6) 行激活它,然后在虚拟环境上执行第 7 行(安装 Flask) 。

我也尝试过os.system('. virt/bin/activate')但每次我运行 python 文件时,它都会执行,除了启动虚拟环境之外,它会执行所有操作。

我正在 Mac 的终端上运行它。

最佳答案

虚拟环境很可能仅在 os.system() 调用期间处于事件状态。在许多情况下,不需要激活虚拟环境,只需找到其 bin 目录并运行其中找到的二进制文件即可。

类似的事情:

  • os.system('/path/to/venv/bin/python -m pip install Flask')
  • os.system('/path/to/venv/bin/pip installflask')

对于不同的方法:

#!/usr/bin/env python3

import pathlib
import subprocess
import venv

class _EnvBuilder(venv.EnvBuilder):

    def __init__(self, *args, **kwargs):
        self.context = None
        super().__init__(*args, **kwargs)

    def post_setup(self, context):
        self.context = context

def _venv_create(venv_path):
    venv_builder = _EnvBuilder(with_pip=True)
    venv_builder.create(venv_path)
    return venv_builder.context

def _run_python_in_venv(venv_context, command):
    command = [venv_context.env_exe] + command
    print(command)
    return subprocess.check_call(command)

def _run_bin_in_venv(venv_context, command):
    command[0] = str(pathlib.Path(venv_context.bin_path).joinpath(command[0]))
    print(command)
    return subprocess.check_call(command)

def _main():
    venv_path = pathlib.Path.cwd().joinpath('virt')
    venv_context = _venv_create(venv_path)
    _run_python_in_venv(venv_context, ['-m', 'pip', 'install', '-U', 'pip'])
    _run_bin_in_venv(venv_context, ['pip', 'install', 'attrs'])

if __name__ == '__main__':
    _main()

关于python - 如何在 python 脚本中启动和运行 virtualenv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60066755/

相关文章:

python - 如何在 Django 上使用 Plotly 创建图表?

python - 如何回滚 virtualenv 环境

python - 没有带有全局解释器的名为 flask.__main__ 的模块(可以使用 virtualenv)

python - 将(生成的) header 添加到许多文件的最有效方法?

python - mysql读取->处理->更新,针对大数据进行优化

python - Django 模拟补丁无法正常工作

python 3 : How do I use bytes-to-bytes and string-to-string encodings

Python pyglet AVBin - 如何安装 AVBin

ipython - 如何为 Anaconda/Jupyter 设置默认环境?

python - 强制使用 virtualenv pip