Python 3 пытается запустить Python 2 на подпроцесс (Windows) - PullRequest
0 голосов
/ 03 сентября 2018

У меня установлено 2 интерпретатора Python на компьютере с Windows 10. Python 3.6 из ArcGIS pro 2.2 и Python 2.7 из ArcMap 10.6, используя cmd в Windows:

"C:/Program Files/ArcGIS/Pro/bin/Python/Scripts/propy" -c "import arcpy;print(arcpy.__path__)"

Вывод:

'C:\\Program Files\\ArcGIS\\Pro\\Resources\\ArcPy\\arcpy'

Это ожидаемый результат, но мне нужно сделать то же самое, используя subprocess.Popen из Python2.7, а также нужно использовать shell=True

cmd = """ "C:/Program Files/ArcGIS/Pro/bin/Python/Scripts/propy" -c "import arcpy;print(arcpy.__path__)" """ 
subprocess.Popen(cmd, shell=True,stdout = subprocess.PIPE)
process.stdout.read()

Это вызовет ошибку:

Fatal Python error: Py_Initialize: unable to load the file system codec
  File "C:\Python27\ArcGIS10.5\lib\encodings\__init__.py", line 123
    raise CodecRegistryError,\

В основном используется интерпретатор Python2.7, я попытался установить %PYYHONPATH% на Python3.6, но проблема все та же

Просто примечание, propy - это .bat, который активирует virtualenv Python и, следовательно, должен правильно все настраивать

Как получить правильный вывод, используя subprocess.Popen?

1 Ответ

0 голосов
/ 11 июля 2019

У нас была похожая проблема при попытке запуска скриптов на Python в ArcGIS Workflow Manager в ArcGIS Pro. Проблема в том, что ArcGIS Workflow Manager загружает Python 2.X, но нам нужен Python 3.X

Чтобы решить эту проблему, мы добавили следующее в __init__.py

import sys 

if sys.version_info[0] >= 3:
    # When run through Workflow Manager 10.5, the PYTHONPATH environment 
    # variable is being set to the Python 2 environment, and that needs to be removed
    # when running in the Python 3 environment.
    sys.path = list(filter(lambda p: 'arcgis\\desktop' not in p, sys.path))
...