如何解决Python:如何在temp目录创建虚拟环境并使用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"])
解决方法
我相信以下应能达到您的期望:
#!/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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。