亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python:如何在臨時目錄中創建虛擬環境并使用 pip 安裝模塊

Python:如何在臨時目錄中創建虛擬環境并使用 pip 安裝模塊

三國紛爭 2023-06-06 10:16:33
我想創建一個臨時文件并編寫一個 python 腳本。我想在此臨時目錄中創建一個虛擬環境并使用 pip,然后在虛擬環境中運行此腳本。import pathlibimport tempfile import venvtemp = 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"])
查看完整描述

1 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

我相信以下應該達到您的期望:


#!/usr/bin/env python3


import pathlib

import string

import subprocess

import tempfile

import venv


SCRIPT_TEMPLATE = '''\

#!${venv_executable}


import requests

print(requests)

'''


class EnvBuilder(venv.EnvBuilder):


    def __init__(self, *args, **kwargs):

        super().__init__(*args, **kwargs)

        self.context = None


    def post_setup(self, context):

        self.context = context


def 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()


查看完整回答
反對 回復 2023-06-06
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號