- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我面临着与此处提出的问题类似的情况:Python Import error on installing ruamel.yaml in custom directory
我知道我们会想要使用某种形式的 python 环境隔离机制,如 virtualenv 来创建我们的 python 代码可以在其中运行的隔离环境。然而,在我所在的行业中,我们编写几个 python 包需要在其他带有自己的 python 解释器的现成软件中使用的情况并不少见,因此我们受到限制软件(例如 autodesk maya)使用的 python 版本,我们没有使用 virtualenv 的灵 active 。
pip install --install-option="--prefix=\\vm-fs-001\prod\sww\proj\general\python\python-2.7.14" <package_name>
我们使用类似于上述命令的方式将写入的这些代码部署到自定义的第 3 方目录中。我们将环境设置为包含站 pip 包和第 3 方部署文件夹的脚本。
PYTHONPATH=\\vm-fs-001\prod\sww\proj\general\python\python-2.7.14\Lib\site-packages;%PYTHONPATH%
PATH=\\vm-fs-001\prod\sww\proj\general\python\python-2.7.14\Scripts;%PATH%;
在这种情况下,该软件与 python 2.7.14 解释器捆绑在一起,我们编写了一个需要 ruamel.yaml 的包
尝试在第 3 方软件的 python 解释器中导入 ruamel.yaml 时出现以下错误。
ImportError: No module named ruamel.yaml
即使我从我的标准 python 2.7.14 解释器中导入 ruamel,我也会得到相同的 ImportError。
λ python
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import ruamel.yaml
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named ruamel.yaml
>>> import sys
>>> sys.path
['', '\\\\vm-fs-001\\prod\\sww\\proj\\general\\python\\python-2.7.14\\Lib\\site-packages', 'C:\\windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', '\\\\vm-dc-001\\RedirectedFolders$\\nelson.lim\\AppData\\Roaming\\Python\\Python27\\site-packages', 'C:\\Python27\\lib\\site-packages']
>>>
但是,如果我在此处添加 __init__.py
:\\vm-fs-001\prod\sww\proj\general\python\python-2.7.14\Lib\site-packages\ruamel\__init__.py
并使 ruamel 文件夹成为包而不是命名空间文件夹,导入错误将消失。
导入带有安装在自定义文件夹中的命名空间的包似乎存在问题。
我该如何解决这个问题?
最佳答案
Namespaces are a honking great idea ,但不幸的是,命名空间包的实现存在一些问题,ruamel.yaml
安装程序必须解决这些问题。虽然我没有对 ruamel.yaml
安装程序中的 .pth
文件做任何事情,但 --prefix
-ed 安装没有似乎以与非前缀安装相同的方式处理它们。
ruamel.yaml
安装程序是数据驱动的,setup.py
在许多包之间是通用的。在没有任何功能改进的情况下重写和测试所有这些将花费大量时间,并且到目前为止没有人愿意为此付出代价(而且可能更好地花在改进命名空间包机制上)。
除了完全重新打包 ruamel.yaml
之外,如果 ruamel/__init__.py
在您之前加载自己的包时不存在,您应该能够创建它您执行 from ruamel.yaml import YAML
(假设您的包依赖于 ruamel.yaml
)。如果 ruamel.yaml
是可选安装,或者作为一般解决方法,我建议您创建一个包 ruamel_yaml
来创建该文件(即 PREFIX/ruamel/__init__ .py
),如果该文件不存在,则在其 __init__.py
中执行 from ruamel.yaml import *
。
当您使用以下方式进行前缀安装时,这种方法至少适用于基于 Linux 的安装:
pip install --prefix=/path/to/some/directory ruamel_yaml-0.1-py2.py3-none-any.whl
创建这样一个包的setup.py
:
from setuptools import setup
import os
from textwrap import dedent
pkg = 'ruamel_yaml'
os.makedirs(pkg)
with open(pkg + '/__init__.py', 'w') as fp:
fp.write(dedent("""\
import sys
import os
fn = __file__.replace('ruamel_yaml', 'ruamel').replace('__init__.pyc', '__init__.py')
if not os.path.exists(fn):
with open(fn, 'w'):
pass
from ruamel.yaml import *
"""))
with open('setup.cfg', 'w') as fp:
fp.write('[bdist_wheel]\nuniversal = 1\n')
setup(name=pkg,
version='0.1',
description='wrapper for --prefix installations of ruamel.yaml',
author='Your Name',
url='http://someurl.com',
author_email='your@email',
license='MIT',
install_requires=['ruamel.yaml'],
packages=[pkg],
zip_safe=False)
使用以下方法创建 ruamel_yaml-0.1-py2.py3-none-any.whl
pip install wheel
python setup.py bdist_wheel
如有必要,生成的 __init__.py
还应该执行“使 ruamel 文件夹成为一个包而不是命名空间文件夹”的步骤(我不清楚这意味着什么),如果这在 Windows/for Maya 上是必需的。
关于python - ruamel.yaml 安装在自定义文件夹中时出现 ImportError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49674684/
我似乎无法弄清楚如何使用 Ruamel.yaml 在数据之间添加一个空行。 假设我有数据: --- a: 1 b: 2 我需要添加到这一点,以便我将有: --- a: 1 b: 2 c: 3 我知道空
我正在使用 Ruamel Python 库以编程方式编辑人工编辑的 YAML 文件。 我很难理解如何将评论插入结构化数据。 我有一些数据: a: b: banana c: apple d:
我正在使用 Ruamel Python 库以编程方式编辑人工编辑的 YAML 文件。源文件具有按字母顺序排序的键。 我不确定这是一个基本的 Python 问题还是一个 Ruamel 问题,但是我尝试对
如果我有多个引用,当我使用 Python 中的 ruaml.yaml 将它们写入 YAML 文件时,我得到: helptexts: - &help-one help_text: |
我有一个使用 ruamel.yaml 和 ruamel.yaml.jinja2 一段时间的 docker 容器。最近它开始失败了。以下 dockerfile 重现了该问题: FROM ubuntu R
这里是python版本: Python 3.6.5 我想安装 ruamel: pip3 install ruamel 但我无法安装它: (venvpython3) d3alg@ubuntu-59:/$
我跑了一个 pip install ruamel.yaml 当我尝试做的时候 import ruamel.yaml 我得到一个错误: ImportError: No module named ruam
ruamel.yaml 文档很少,我在这里没有找到我需要的响应。 my_file.yaml 的内容: desc: "blahblahblah" 问题1:如何(以编程方式)将“size”添加为与“des
我需要对带有注释的 YAML 文件进行排序。我正在使用 ruamel.yaml 库来保留 YAML 中的注释,但是当我对项目进行排序时,注释被放置在错误的位置。 people = """\ # man
我希望使用 ruamel.yaml 对大型人工编辑的 YAML 文件执行一些自动编辑。 输入文件包含合并键,如下所示: foo: &foo color: red bar: name: qux
我想在我的项目中使用 Ruamel YAML,我使用代理,所以我下载了 来自https://pypi.python.org/pypi/ruamel.yaml的gzip包并安装它 pip install
我正在尝试使用 ruamel.yaml 使用 python 动态修改 AWS CloudFormation 模板。我添加了以下代码以使 safe_load 与 CloudFormation 函数(例如
在哪里可以找到 Python 包的完整文档 ruamel.yaml哪个加载和转储 YAML 文件? Python Package Index 仅给出了如何使用注释的示例。我正在尝试了解如何整体使用该包
我有两个问题! 有没有办法防止 round_trip_dump 甚至只是常规转储在句子中间断行?每当我的 YAML 文件中有一个长句子(即描述),并且我使用脚本来更改一些内容时,它就会断行并破坏我的文
我想转储一个包含嵌套列表组件的字典,其中列表的每一行都在自己的行上。我还想保持字典顺序。 这是一个 MWE: import sys from ruamel import yaml from ruame
MWE: import sys from ruamel.yaml import YAML yaml = YAML(typ='safe') yaml.default_flow_style = False
使用 Python 3.4.7,ruamel.yaml 版本 0.15.35,以下内容对我不起作用: import sys import enum import ruamel.yaml from ru
我正在使用 Ruamel 来保留人工编辑的 YAML 文件中的引用样式。 我有示例输入数据: --- a: '1' b: "2" c: 3 我使用以下方式读入数据: def read_file(f):
我正在使用 ruamel.yaml 来解析复杂的 YAML 文档,其中某些标记的节点需要特殊处理。按照已发布示例的建议,我使用 add_multi_constructor 注入(inject)自定义解
给出以下代码: from ruamel.yaml import YAML yaml = YAML() with open(filename) as f: z = yaml.load(f) ya
我是一名优秀的程序员,十分优秀!