如何用python2.7来命名python3.6?

2024-05-15 16:44:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python文件test.py,必须在python2.7解释器中执行,而main.py中的一些其他代码需要python3.6解释器

我必须通过test.py调用python3.6解释器来执行main.py中的代码,因为main.py依赖于python2.7中不可用的库的某些特定版本。另外,由于我正在编写一个应用程序插件,该插件的解释器只有2.7版。所以我必须进行跨版本调用。并且在它们之间要传递一些参数

我尝试通过test.py中的subprocess模块打开一个子流程。但是遇到了以下错误

test.py中的代码:

import subprocess

epath = r'E:\Anaconda3\envs\***\python.exe'
fpath = r'D:\Codes\_Projects\***\main.py'

p = subprocess.call(
            [epath, fpath],
            stdin=None,
            stdout=None,
            stderr=None,
            creationflags=subprocess.CREATE_NEW_CONSOLE,
            shell=False
        )

        for line in iter(p.stdout.readline, b''):
            print line
        p.stdout.close()
        p.wait()

我得到一个错误(在执行子进程的cmd窗口中):

Python error: Py_Initialize: unable to load the file system codec
  File "E:/Slicer_4.10.2/bin/../lib/Python/Lib\encodings\__init__.py", line 123
    raise CodecRegistryError,\
                            ^
SyntaxError: invalid syntax

Current thread 0x00006a00 (most recent call first):

路径E:/Slicer_4.10.2/bin/python2.7解释器的目录。Slicer是我正在为其开发插件的软件。它附带一个python2.7解释器。必须使用此解释器执行我的test.py

我在谷歌上搜索了这个错误,有人说这是由于环境变量不匹配造成的。所以我在test.py中打印出了环境变量,下面是其中的一些:

'PYTHONPATH': 'E:/Slicer_4.10.2/bin/../lib/Slicer-4.10;E:/Slicer_4.10.2/bin/../lib/Slicer-4.10/qt-scripted-modules;E:/Slicer_4.10.2/bin/../lib/Slicer-4.10/qt-loadable-modules;E:/Slicer_4.10.2/bin/../lib/vtkTeem;E:/Slicer_4.10.2/bin/../bin/Python;E:/Slicer_4.10.2/bin/../lib/Slicer-4.10/qt-loadable-modules/Python;E:/Slicer_4.10.2/bin/../lib/Python/Lib;E:/Slicer_4.10.2/bin/../lib/Python/Lib/lib-dynload;E:/Slicer_4.10.2/bin/../lib/Python/Lib/site-packages;E:/Slicer_4.10.2/bin/.././bin/Lib/site-packages;E:/Slicer_4.10.2/bin/.././lib/Slicer-4.10/python2.7/site-packages;E:/Slicer_4.10.2/bin/../lib/Python/lib/Python/Lib;E:/Slicer_4.10.2/bin/../lib/Python/lib/Python/Lib/lib-dynload;E:/Slicer_4.10.2/bin/../lib/Python/lib/Python/Lib/site-packages;E:/Slicer_4.10.2/bin/../bin/Python',
'PYTHONHOME': 'E:/Slicer_4.10.2/bin/../lib/Python',
'PYTHONNOUSERSITE': '1',

可以看出,所有与python相关的环境变量都位于切片器路径下,这意味着这些是python2.7解释器在运行时添加的环境变量。我确信这一点,因为我没有手动将它们添加到系统的环境变量中。显然,他们不是intepreter需要的环境

那么,有没有办法重置环境变量,或者在没有PYTHONPATH等环境变量集的cmd/powershell中运行子进程

我的操作系统是windows 10.0


Tags: 代码pytest插件binmainlibpackages