我有一个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
目前没有回答
相关问题 更多 >
编程相关推荐