我正在一台我没有太多控制权的机器上编写和运行Python程序.全球环境已安装Python 3.6以及数十个包.在该环境中,我需要能够运行许多脚本.

我在Python 3.9虚拟环境中运行我开发的大部分脚本.将Py3.6全局环境中的数十个包安装到我的venv中并不切实际,但我确实希望能够从我自己的3.9脚本运行一些为3.6环境设计的脚本.

我不需要与我正在运行的3.6脚本交互.我想在生成时打印输出,然后处理它产生的任何文件.

这基本上是我想做的,尽管它实际上不起作用:

def run36 (scriptname):
    p = subprocess.Popen("deactivate;", "python3", scriptname, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1, universal_newlines=True)
    for l in p.stdout():
        print(l.rstrip())
    return p.returncode

run36("some36prog.py")  # will generate somenewfile.txt
with open("somenewfile.txt") as f:
    ...

如果正确的答案是我需要显式调用Python3.6可执行文件才能使其工作,那么我需要能够以某种方式发现其路径,而无需硬编码.

推荐答案

只需使用到达全局解释器的绝对路径即可.或者,如果您只需要Python版本,请创建另一个virtualLev并使用其中的解释器.

例如

# create a Python3.6 virtualenv
python3.6 -m venv venv36

# use the python3.6 interpreter from code running with python3.12
python3.12 -c "import subprocess; subprocess.run(['venv36/bin/python', 'some_script.py'])"

Python相关问答推荐

如果条件为真,则Groupby.mean()

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

如何检测背景有噪的图像中的正方形

ModuleNotFound错误:没有名为Crypto Windows 11、Python 3.11.6的模块

使用索引列表列表对列进行切片并获取行方向的向量长度

将图像拖到另一个图像

我如何使法国在 map 中完全透明的代码?

递归访问嵌套字典中的元素值

跳过嵌套JSON中的级别并转换为Pandas Rame

在代码执行后关闭ChromeDriver窗口

Polars map_使用多处理对UDF进行批处理

如果有2个或3个,则从pandas列中删除空格

如何求相邻对序列中元素 Select 的最小代价

如何在Python中将超链接添加到PDF中每个页面的顶部?

有没有办法让Re.Sub报告它所做的每一次替换?

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

在不中断格式的情况下在文件的特定部分插入XML标签

为什么在不先将包作为模块导入的情况下相对导入不起作用

如何通过函数的强式路径动态导入函数?