【问题标题】:How to avoid loading wrong libraries when using a subprocess.Popen() from a python script to run a venv?从 python 脚本使用 subprocess.Popen() 运行 venv 时如何避免加载错误的库?
【发布时间】:2022-11-28 23:37:06
【问题描述】:

我想从另一个使用 python3.6 的应用程序的子进程调用中使用 venv python~3.9 运行脚本。但是导入的库是错误的,来自 3.6 版本的站点包。如何修改子进程调用以加载正确的库,即从 venv(3.9 版本)

p = Popen([process_name, parameters_l], stdin=PIPE, stdout=PIPE, stderr=PIPE)

我尝试过使用 cwd 并通过 os.chdir 更改工作目录,但这似乎不起作用。此外,我尝试从 venv 运行 activat.bat,但问题仍然存在。

【问题讨论】:

  • 你会在你的 shell(或终端)中输入 which python 吗?请张贴在这里。

标签: python subprocess loadlibrary


【解决方案1】:

您应该使用该 venv 的绝对路径,例如 /path/to/venv/bin/python3.9

【讨论】:

    【解决方案2】:

    这是我的例子。

    例子.py

    此代码显示您运行的 python 版本。

    import sys 
    print("version {}".format(sys.version))
    

    遍历python.sh

    此代码遍历各种 python 版本以显示哪个版本运行代码。

    您可以将 process_name 更改为您要使用的 python 版本。

    import time
    import subprocess, os
    
    pythoninterpretor = ['/usr/local/bin/python3.10', '/usr/local/bin/python3.11']
    
    for i in pythoninterpretor:
        process_name = i
        parameters = 'example.py'
        p = subprocess.Popen([process_name, parameters])
        time.sleep(10)
    

    我的结果

    仅供参考,即使您在脚本中的 shebang 中明确使用另一个 python 版本,结果也不会改变。

    version 3.10.8 (main, Oct 13 2022, 10:17:43) [Clang 14.0.0 (clang-1400.0.29.102)]
    version 3.11.0 (main, Oct 25 2022, 14:13:24) [Clang 14.0.0 (clang-1400.0.29.202)]
    
    

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      相关资源
      最近更新 更多