【问题标题】:Failure to import kml module from fastkml package从 fastkml 包导入 kml 模块失败
【发布时间】:2017-02-09 18:02:29
【问题描述】:

从OSGeo4W启动的命令窗口开始,我成功安装了与windows 7上运行的python 2.7兼容的fastkml python包。

当我从命令窗口运行python时,我可以从fastkml包中导入kml模块。

但是,如果我从同一命令窗口启动 IDLE 用户界面并尝试从 fastkml 包中导入 kml 模块,则会收到如下错误:

Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
> from fastkml import kml

>Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    from fastkml import kml
  File "C:\OSGeo4W\apps\Python27\lib\site-packages\fastkml\__init__.py", line 28, in <module>
    from pkg_resources import get_distribution, DistributionNotFound
  File "C:\OSGeo4W\apps\Python27\lib\site-packages\pkg_resources\__init__.py", line 77, in <module>
    __import__('pkg_resources.extern.packaging.specifiers')
  File "C:\OSGeo4W\apps\Python27\lib\site-packages\pkg_resources\extern\__init__.py", line 42, in load_module
    __import__(extant)
  File "C:\OSGeo4W\apps\Python27\lib\site-packages\pkg_resources\_vendor\packaging\specifiers.py", line 275, in <module>
    class Specifier(_IndividualSpecifier):
  File "C:\OSGeo4W\apps\Python27\lib\site-packages\pkg_resources\_vendor\packaging\specifiers.py", line 373, in Specifier
    r"^\s*" + _regex_str + r"\s*$", re.VERBOSE | re.IGNORECASE)
  File "C:\OSGeo4W\apps\Python27\lib\re.py", line 190, in compile
    return _compile(pattern, flags)
  File "C:\OSGeo4W\apps\Python27\lib\re.py", line 242, in _compile
    raise error, v # invalid expression
error: nothing to repeat

以下是用于启动 OSgeo4W 的 bat 文件中的代码,而 OSgeo4W 又会启动 IDLE

@echo off
set OSGEO4W_ROOT=%~dp0
rem Convert double backslashes to single
set OSGEO4W_ROOT=%OSGEO4W_ROOT:\\=\%
echo. & echo OSGEO4W home is %OSGEO4W_ROOT% & echo.
set PATH=%OSGEO4W_ROOT%\bin;%PATH%
rem Add application-specific environment settings
for %%f in ("%OSGEO4W_ROOT%\etc\ini\*.bat") do call "%%f"
CALL C:\Python27\Lib\idlelib\idle.bat
@echo on
@if [%1]==[] (echo run o-help for a list of available commands & cmd.exe /k)    else (cmd /c "%*")

【问题讨论】:

  • 您报告的行为令人费解。 IDLE 不应该,而且我想说不能,影响正则表达式的创建或尝试编译它的结果。请从命令窗口重新运行 python 并查看初始启动行Python 2.7.10 (default, May 23 2015, ... 是否*完全相同。在&gt; from fastkml import kml 之后,&gt; kml.__file__ 返回什么?如果在re.compile中添加print pattern, flags(返回之前),运行python和IDLE时会打印什么?你在控制台中用来启动 python 和 IDLE 的命令行是什么?
  • 初始启动行是:Python 2.7.4 (default, Apr 6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32
  • kml.__file__ 返回 C:\OSGeo4W\apps\Python27\lib\site-packages\fastkml\kml.pyc
  • 用于启动 OSGeo4W 和 IDLE 的 bat 文件现在显示在原始帖子中。
  • @TerryJanReedy 我没有 re.compile 文件。您不是说下面的文件 C:\OSGeo4W\apps\Python27\lib\re.py",第 190 行吗?

标签: python python-2.7 python-idle osgeo


【解决方案1】:

正如我所怀疑的,您安装了两个 python 2.7。从路径和启动画面中我可以看出:

C:\python27 有 2.7.10,您的批处理文件使用它来运行 IDLE。

C:\OSGeo4W\apps\Python27 必须有 2.7.4,这可能是您直接运行的 python,并且可以正确导入。

在两个 shell 中运行 &gt;&gt;&gt; import sys; sys.executable 将验证或更正这些结论。如果它们是正确的,那么一个可能的解决方法是用C:\OSGeo4W\apps\Python27 替换批处理文件中的C:\python27,以便IDLE 在运行的python 上运行。当然,C:\OSGeo4W\apps\Python27\Lib 可能不包含\idlelib

【讨论】:

  • 谢谢。是的,你是对的。我将在本周晚些时候返回此内容以纠正环境并确认一切正常。
  • @strm_1 对发布的问题给出的答案:stackoverflow.com/questions/25836182/… 让我得到了排序。非常感谢。
猜你喜欢
  • 2019-04-28
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多