PyYAML 与 Python 3.x
PyYAML with Python 3.x
我在 Python 3.x 中使用 yaml (PyYAML 3.11) 库时遇到问题。当我调用 import yaml
时出现以下错误:
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/mlohr/python-libs/yaml/__init__.py", line 2, in <module>
from error import *
ImportError: No module named 'error'
error
是一个位于 yaml 目录中的文件,但是来自 yaml 的 __init__.py
确实使用了绝对导入。我想这就是问题所在,但我不确定。
在 http://pyyaml.org/wiki/PyYAMLDocumentation#Python3support 中是关于(假设)Python 3 支持的短路径,所以我不确定我是否使用错误的方式。
将 Python 3 与使用 yaml 的 python 脚本一起使用时,会出现同样的问题(这就是我发现问题的方式)。
在 Python 2.7 和 2.6 中可以正常工作。
任何 idea/suggestion 如何让它工作?
您似乎要么使用旧版本的 PyYAML
,要么使用 PyYAML
安装的 PyYAML
和 Python3,如,因为在你的回溯中我们看到
from error import *
这不是绝对导入。您应该升级,在您的环境中使用 Python3 个源重新安装 PyYAML
,或者为 Python3 个包创建一个新环境。
您的环境被污染了。如果你创建一个(临时的)virtualenv,这没有问题:
$ mktmpenv -p /opt/python/3.4/bin/python
Running virtualenv with interpreter /opt/python/3.4/bin/python
Using base prefix '/opt/python/3.4'
New python executable in /home/venv/tmp-504ff2573d39ad0c/bin/python
Installing setuptools, pip, wheel...done.
This is a temporary environment. It will be deleted when you run 'deactivate'.
(tmp-504ff2573d39ad0c) $ pip install pyyaml
Collecting pyyaml
Installing collected packages: pyyaml
Successfully installed pyyaml-3.11
(tmp-504ff2573d39ad0c) $ python
Python 3.4.3 (default, Jun 5 2015, 09:05:22)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
>>>
最可能的原因是您重新使用了为 Python 2.X 安装的 YAML。 2.x and 3.x 安装的 PyYAML 源实际上是不同的。
解决此问题的最简单方法是安装和使用 ruamel.yaml(免责声明:我是该软件包的作者),这是对 PyYAML 的升级,其中的源再次重新组合。
我在 Python 3.x 中使用 yaml (PyYAML 3.11) 库时遇到问题。当我调用 import yaml
时出现以下错误:
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/mlohr/python-libs/yaml/__init__.py", line 2, in <module>
from error import *
ImportError: No module named 'error'
error
是一个位于 yaml 目录中的文件,但是来自 yaml 的 __init__.py
确实使用了绝对导入。我想这就是问题所在,但我不确定。
在 http://pyyaml.org/wiki/PyYAMLDocumentation#Python3support 中是关于(假设)Python 3 支持的短路径,所以我不确定我是否使用错误的方式。
将 Python 3 与使用 yaml 的 python 脚本一起使用时,会出现同样的问题(这就是我发现问题的方式)。
在 Python 2.7 和 2.6 中可以正常工作。
任何 idea/suggestion 如何让它工作?
您似乎要么使用旧版本的 PyYAML
,要么使用 PyYAML
安装的 PyYAML
和 Python3,如
from error import *
这不是绝对导入。您应该升级,在您的环境中使用 Python3 个源重新安装 PyYAML
,或者为 Python3 个包创建一个新环境。
您的环境被污染了。如果你创建一个(临时的)virtualenv,这没有问题:
$ mktmpenv -p /opt/python/3.4/bin/python
Running virtualenv with interpreter /opt/python/3.4/bin/python
Using base prefix '/opt/python/3.4'
New python executable in /home/venv/tmp-504ff2573d39ad0c/bin/python
Installing setuptools, pip, wheel...done.
This is a temporary environment. It will be deleted when you run 'deactivate'.
(tmp-504ff2573d39ad0c) $ pip install pyyaml
Collecting pyyaml
Installing collected packages: pyyaml
Successfully installed pyyaml-3.11
(tmp-504ff2573d39ad0c) $ python
Python 3.4.3 (default, Jun 5 2015, 09:05:22)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yaml
>>>
最可能的原因是您重新使用了为 Python 2.X 安装的 YAML。 2.x and 3.x 安装的 PyYAML 源实际上是不同的。
解决此问题的最简单方法是安装和使用 ruamel.yaml(免责声明:我是该软件包的作者),这是对 PyYAML 的升级,其中的源再次重新组合。