0

我对此很陌生(昨天之前甚至没有使用过终端),但我正在尝试按照 Bjorn Sandvik 在http://blog.thematicmapping.org/2012/07/terrain-mapping的说明进行一些地形映射-with-mapnik.html。我已经按照我能理解的各自网站上的说明安装了 python 和 mapnik,但是当我尝试在终端中通过 python 导入 mapnik 时,我得到了 ImportError。谁能告诉我如何解决这个问题?在我看来它正在调用不同版本的 python(如果我只是在终端中键入 python 而不是 /usr/local/bin/python 它返回 2.6),但我不知道该怎么做或我去了哪里安装过程出错。我在 Mac OSX 10.6、64 位上。

$ mapnik-config -v
2.2.0
$ /usr/local/bin/python
Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> import mapnik
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/site-packages/mapnik/__init__.py", line 69, in <module> from _mapnik import *
ImportError: dlopen(/usr/local/lib/python2.6/site-packages/mapnik/_mapnik.so, 2): Symbol not found: __tlv_bootstrap
Referenced from: /usr/local/lib/libmapnik.dylib
Expected in: /usr/lib/libSystem.B.dylib
  in /usr/local/lib/libmapnik.dylib
  >>> 

更新:希望它会有所帮助(因为我一直计划这样做),我将我的操作系统升级到小牛,按照此处的说明从 python.org 卸载了我的所有 Python 版本:如何卸载 Python 2.7 Mac OS X 10.6.4?,然后安装当前版本的 Xcode(如果没有在 Apple 为 OSX 10.6.8 支付 99 美元的开发人员帐户,它就无法使用),再次运行 William 下面列出的命令来安装 homebrew、Python 和 mapnik,并尝试“导入” mapnik' 再次在 Python 中。仍然没有工作,但我现在有不同的错误消息。

python
Python 2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import mapnik
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mapnik
>>>

我跑了 brew doctor ,这次警告少得多,似乎没有什么令人惊讶的。我确实接受了 brew 医生的建议,并尝试使用他们推荐的代码重置我的 PATH:

echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile

那也没有帮助。我的工作目录现在是 Macintosh:bin home_directory$。

在 Python 安装结束时我还注意到一个错误:

Error: Permission denied - /usr/local/lib/python2.7/site-packages/sitecustomize.py

此消息在 mapnik 安装结束时重新出现。也许这些都没有正确安装?当我执行 mapnik-config -v 时,它显示 2.2.0。当我执行 python --version 时,它显示 2.7.5。当我查看 /usr/local/bin 时,我可以看到这些文件:mapnik-config、mapnik-speed-check。当我查看 /usr/bin 时,我没有看到任何 mapnik 文件。

更新 2:成功了!我只需要在 mapnik README.txt 文件中重新执行“启用 python 绑定”操作(我首先重置到我的主目录,不确定这是否重要)。这:

py_version=$(python -c "import sys;print('%s.%s' % (sys.version_info[0],sys.version_info[1]))")
    export PYTHONPATH=/usr/local/lib/python${py_version}/site-packages/:$PYTHONPATH

似乎正在工作。现在我只需要修复我的 mapnik 代码就可以了!非常感谢评论的人。我没有足够的“声誉”来投票威廉的帖子,所以如果有人能做到这一点,将不胜感激!

4

2 回答 2

1

即使在 brew install 之后,您也必须像这样手动导出绑定

export PYTHONPATH="/usr/local/lib/python2.7/site-packages"
于 2014-12-04T20:03:30.437 回答
0

你是对的,你有 Python 版本冲突。由于您在 OSX 上并且您以前没有真正使用terminal过,因此它不会是一个“简单的修复”。我建议您阅读本书http://linuxcommand.org/tlcl.php,以了解如何正确使用命令行。注意:即使它适用于 Linux,它也适用于 BASH shell,它在 OSX 中默认使用。

仅在键入时获得 Python 2.6 的原因是,在环境变量python中,保存该版本 python 的可执行文件的目录列在保存 Python 2.7 的可执行文件的目录之前。$PATH这也意味着当您安装mapnik它时,很可能在 for Python 2.6 中安装了该模块site-packages并将其绑定到该版本。

首先要检查的是是否可以mapnik在 Python 2.6 中导入。所以python从终端运行(不是/usr/local/bin/python)。如果这行得通,那么这将证实我上面提到的。

最快的解决方案是修复 $PATH 环境变量以指向正确版本的 python,然后重新安装 mapnik。

最简单的解决方案,我推荐你用HomebrewPython来安装。Homebrew 是 OSX 的包管理器。

要安装 Homebrew,请在终端输入:

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"

然后安装 Python:

brew install python

然后安装mapnik;

brew install mapnik

如果你使用 Homebrew,一切都应该正确、自动地设置,理论上不应该有版本冲突。

于 2013-12-01T13:15:41.427 回答