Python:如何在临时目录中创建虚拟环境并使用 pip 安装模块

我想创建一个临时文件并编写一个 python 脚本。我想在此临时目录中创建一个虚拟环境并使用 pip,然后在虚拟环境中运行此脚本。


import pathlib

import tempfile 

import venv


temp = tempfile.TemporaryDirectory()


virtualenv = venv.EnvBuilder(system_site_packages=false)

virtualenv.create(temp.name)


# how could I activate the virtual environment and install the pip module?


with open(pathlib.Path(temp.name)/"run.py", "w") as f:

    f.write("#/usr/bin/env python\n\n")

    f.write("import requests\n")


p = subprocess.run(["python", temp.name", "run.py"])


三国纷争
浏览 139回答 1
1回答

小唯快跑啊

我相信以下应该达到您的期望:#!/usr/bin/env python3import pathlibimport stringimport subprocessimport tempfileimport venvSCRIPT_TEMPLATE = '''\#!${venv_executable}import requestsprint(requests)'''class EnvBuilder(venv.EnvBuilder):    def __init__(self, *args, **kwargs):        super().__init__(*args, **kwargs)        self.context = None    def post_setup(self, context):        self.context = contextdef main():    with tempfile.TemporaryDirectory() as target_dir_path:        print(f" *** Created temporary directory '{target_dir_path}'.")        #        print(f" *** Creating virtual environment...")        venv_builder = EnvBuilder(with_pip=True)        venv_builder.create(str(target_dir_path))        venv_context = venv_builder.context        #        requirements = [            'requests',        ]        print(f" *** Installing {requirements}...")        pip_install_command = [            venv_context.env_exe,            '-m',            'pip',            'install',            *requirements,        ]        subprocess.check_call(pip_install_command)        #        print(" *** Generating script...")        script_substitutions = {            'venv_executable': venv_context.env_exe,        }        script = (            string.Template(SCRIPT_TEMPLATE).substitute(script_substitutions)        )        print(" *** Generated script:")        print("'''")        print(script)        print("'''")        #        script_path = pathlib.Path(target_dir_path).joinpath('run.py')        print(f" *** Writing script '{script_path}'")        script_path.write_text(script)        #        print(" *** Executing script...")        script_command = [            venv_context.env_exe,            str(script_path),        ]        subprocess.check_call(script_command)if __name__ == '__main__':    main()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python