环境变量未在Python中设置

时间:2017-04-28 13:49:24

标签: python batch-file cmd gis qgis

我正在尝试运行一个需要设置某些环境变量的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中设置环境变量并运行时,我得到一个导入错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你正在踩踏(不是编辑)PYTHONPATH。在原始批处理文件中,我们有:

set PYTHONPATH=%QGIS%\python;%PYTHONPATH%

请注意,这会将另一个目录添加到路径中。你的代码:

os.environ['PYTHONPATH'] = r'{}\python;'.format(QGIS,PYTHONPATH)

踩踏PYTHONPATH。你需要更像的东西:

os.environ['PYTHONPATH'] = r'{}\python;'.format(QGIS) + PYTHONPATH