在 __init__.py 中初始化 yaml 模块
initializing yaml module in __init__.py
我正在使用 PyYAML,并希望能够在我的 .yaml 文件中使用字符串连接构造函数。
This post 显示如何将此类构造函数添加到 PyYAML:
import yaml
## define custom tag handler
def join(loader, node):
seq = loader.construct_sequence(node)
return ''.join([str(i) for i in seq])
## register the tag handler
yaml.add_constructor('!join', join)
当我在 python 终端中输入上面的内容时,它就起作用了。但是,我想将上面的内容放在 my_package
的 __init__.py
文件中,这样我就可以:
from my_package import yaml # my_package.__init__.py contains the above code
yaml.load("""
user_dir: &DIR /home/user
user_pics: !join [*DIR, /pics]
""")
但是,这会崩溃并显示以下消息:
AttributeError Traceback (most recent call last)
<ipython-input-1-1107dafdb1d2> in <module>()
----> 1 import simplelearn.yaml
/home/mkg/projects/simplelearn/simplelearn/__init__.py in <module>()
----> 1 import yaml
2
3 def __join(loader, node):
4 '''
5 Concatenates a sequence of strings.
/home/mkg/projects/simplelearn/simplelearn/yaml.pyc in <module>()
AttributeError: 'module' object has no attribute 'add_constructor'
这是怎么回事?为什么 python 找不到 yaml.add_constructor
?
您正在从文件中加载模块 yaml
:
/home/mkg/projects/simplelearn/simplelearn/yaml.pyc
您将自己的文件之一命名为 yaml.py
,或者您确实拥有该文件
之前并重命名它,但忘记删除 yaml.pyc
。所以你没有用 import yaml
.
加载 PyYAML 解释器
最简单的验证方法是在 import
:
之后添加一个临时行
import yaml
print(yaml.__file__)
你应该看到类似.../site-packages/yaml/__init__.pyc
的内容。
我正在使用 PyYAML,并希望能够在我的 .yaml 文件中使用字符串连接构造函数。
This post 显示如何将此类构造函数添加到 PyYAML:
import yaml
## define custom tag handler
def join(loader, node):
seq = loader.construct_sequence(node)
return ''.join([str(i) for i in seq])
## register the tag handler
yaml.add_constructor('!join', join)
当我在 python 终端中输入上面的内容时,它就起作用了。但是,我想将上面的内容放在 my_package
的 __init__.py
文件中,这样我就可以:
from my_package import yaml # my_package.__init__.py contains the above code
yaml.load("""
user_dir: &DIR /home/user
user_pics: !join [*DIR, /pics]
""")
但是,这会崩溃并显示以下消息:
AttributeError Traceback (most recent call last)
<ipython-input-1-1107dafdb1d2> in <module>()
----> 1 import simplelearn.yaml
/home/mkg/projects/simplelearn/simplelearn/__init__.py in <module>()
----> 1 import yaml
2
3 def __join(loader, node):
4 '''
5 Concatenates a sequence of strings.
/home/mkg/projects/simplelearn/simplelearn/yaml.pyc in <module>()
AttributeError: 'module' object has no attribute 'add_constructor'
这是怎么回事?为什么 python 找不到 yaml.add_constructor
?
您正在从文件中加载模块 yaml
:
/home/mkg/projects/simplelearn/simplelearn/yaml.pyc
您将自己的文件之一命名为 yaml.py
,或者您确实拥有该文件
之前并重命名它,但忘记删除 yaml.pyc
。所以你没有用 import yaml
.
最简单的验证方法是在 import
:
import yaml
print(yaml.__file__)
你应该看到类似.../site-packages/yaml/__init__.pyc
的内容。