【发布时间】:2017-04-28 13:49:24
【问题描述】:
我正在尝试运行需要设置某些环境变量的 python 脚本。我目前正在运行一个 .bat 脚本来设置这些环境变量,然后调用 python 脚本。
我想摆脱 .bat 脚本并在 Python 脚本中设置所需的环境变量。
这就是 .bat 脚本的样子 -
SET OSGEO4W_ROOT=C:\Program Files\QGIS 2.18
SET QGISNAME=qgis
SET QGIS=%OSGEO4W_ROOT%\apps\%QGISNAME%
set QGIS_PREFIX_PATH=%QGIS%
CALL "%OSGEO4W_ROOT%\bin\o4w_env.bat"
set PATH=%OSGEO4W_ROOT%\bin;%QGIS%\bin;%PATH%
SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27
set PYTHONPATH=%QGIS%\python;%PYTHONPATH%
python D:\temp\fran\NEW\new.py
这是我试图在 Python 中模仿的方式 -
import os
import subprocess
OSGEO4W_ROOT = r'C:\Program Files\QGIS 2.18'
QGISNAME = r'qgis'
QGIS = r'{}\apps\{}'.format(OSGEO4W_ROOT,QGISNAME)
QGIS_PREFIX_PATH = '{}'.format(QGIS)
bat_command = [r'{}\bin\o4w_env.bat'.format(OSGEO4W_ROOT)]
subprocess.check_call(bat_command)
PATH = os.environ['PATH']
PYTHONPATH = os.environ['PYTHONPATH']
os.environ['PATH'] = r'{}\bin;{}\bin;{}'.format(OSGEO4W_ROOT,QGIS,PATH)
os.environ ['PYTHONHOME'] = r'{}\apps\Python27'.format(OSGEO4W_ROOT)
os.environ ['PYTHONPATH'] = r'{}\python;{}'.format(QGIS,PYTHONPATH)
from qgis.core import (QgsProject, QgsComposition, QgsApplication, QgsMapLayerRegistry)
这是我收到的错误消息 -
ImportError: No module named site
当我从 .bat 文件启动脚本时,一切正常。当我在 python 中设置环境变量并运行时,出现导入错误。
有什么想法吗?
【问题讨论】:
-
如果
o4w_env.bat应该设置所需的环境变量,那么这是行不通的。您将它作为子进程运行,它不能修改其父进程的环境。您可以通过运行命令r'cmd.exe /u /c ""{}\bin\o4w_env.bat" & set"'.format(OSGEO4W_ROOT)来破解它以使其“工作”。使用subprocess.check_output。解码为'utf-16le',然后解析更新os.environ。或者你也可以将o4w_env.bat移植到 Python 中,直接修改当前进程。 -
@eryksun 感谢您的回复。我将尝试模仿 o4w_env.bat 在 Python 中所做的事情。
-
您声明遇到了导入错误,但没有说明错误是什么。
-
@StephenRauch 更新了主体。错误消息是
ImportError: No module named site
标签: python batch-file cmd gis qgis