如何解决ruamel_yaml.constructor.ConstructorError:无法确定“<unicode string>”中标签“tag:yaml.org,2002:python/tuple”的构造函数
我正在尝试下载 Kinetics-600 数据集以进行活动识别,为此我按照此存储库中的说明进行操作:https://github.com/activitynet/ActivityNet
但是,在步骤 conda env create -f environment.yml
我收到此错误:
ruamel_yaml.constructor.ConstructorError: 无法确定 “”第 2 行第 11 列中标记“tag:yaml.org,2002:python/tuple”的构造函数:通道:!!python/tuple
完整的错误报告是:
(base) /mnt/disks/mona/ActivityNet/Crawler/Kinetics$ conda env create -f environment.yml
# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<
Traceback (most recent call last):
File "/opt/conda/lib/python3.7/site-packages/conda/exceptions.py",line 1079,in __call__
return func(*args,**kwargs)
File "/opt/conda/lib/python3.7/site-packages/conda_env/cli/main.py",line 80,in do_call
exit_code = getattr(module,func_name)(args,parser)
File "/opt/conda/lib/python3.7/site-packages/conda_env/cli/main_create.py",line 87,in execute
spec = specs.detect(name=name,filename=filename,directory=os.getcwd())
File "/opt/conda/lib/python3.7/site-packages/conda_env/specs/__init__.py",line 43,in detect
if spec.can_handle():
File "/opt/conda/lib/python3.7/site-packages/conda_env/specs/yaml_file.py",line 18,in can_handle
self._environment = env.from_file(self.filename)
File "/opt/conda/lib/python3.7/site-packages/conda_env/env.py",line 160,in from_file
return from_yaml(yamlstr,filename=filename)
File "/opt/conda/lib/python3.7/site-packages/conda_env/env.py",line 141,in from_yaml
data = yaml_safe_load(yamlstr)
File "/opt/conda/lib/python3.7/site-packages/conda/common/serialize.py",line 67,in yaml_safe_load
return yaml.safe_load(string,version="1.2")
File "/opt/conda/lib/python3.7/site-packages/ruamel_yaml/main.py",line 980,in safe_load
return load(stream,SafeLoader,version)
File "/opt/conda/lib/python3.7/site-packages/ruamel_yaml/main.py",line 935,in load
return loader._constructor.get_single_data()
File "/opt/conda/lib/python3.7/site-packages/ruamel_yaml/constructor.py",line 108,in get_single_data
return self.construct_document(node)
File "/opt/conda/lib/python3.7/site-packages/ruamel_yaml/constructor.py",line 118,in construct_document
for _dummy in generator:
File "/opt/conda/lib/python3.7/site-packages/ruamel_yaml/constructor.py",line 691,in construct_yaml_map
value = self.construct_mapping(node)
File "/opt/conda/lib/python3.7/site-packages/ruamel_yaml/constructor.py",line 418,in construct_mapping
return BaseConstructor.construct_mapping(self,node,deep=deep)
File "/opt/conda/lib/python3.7/site-packages/ruamel_yaml/constructor.py",line 242,in construct_mapping
value = self.construct_object(value_node,line 164,in construct_object
data = constructor(self,node)
File "/opt/conda/lib/python3.7/site-packages/ruamel_yaml/constructor.py",line 711,in construct_undefined
node.start_mark,ruamel_yaml.constructor.ConstructorError: Could not determine a constructor for the tag 'tag:yaml.org,2002:python/tuple'
in "<unicode string>",line 2,column 11:
channels: !!python/tuple
^ (line: 2)
`$ /opt/conda/bin/conda-env create -f environment.yml`
environment variables:
BINARIES_PATH=/opt/deeplearning/binaries
CIO_TEST=<not set>
CONDA_AUTO_UPDATE_CONDA=false
CONDA_DEFAULT_ENV=base
CONDA_EXE=/opt/conda/bin/conda
CONDA_MKL_INTERFACE_LAYER_BACKUP=
CONDA_PREFIX=/opt/conda
CONDA_PROMPT_MODIFIER=(base)
CONDA_PYTHON_EXE=/opt/conda/bin/python
CONDA_ROOT=/opt/conda
CONDA_SHLVL=1
CURL_CA_BUNDLE=<not set>
DL_BIN_PATH=/opt/deeplearning/bin
DL_MetaDATA_PATH=/opt/deeplearning/Metadata
DL_PATH=/opt/deeplearning
ENV_URI_FILE_PATH=/opt/deeplearning/Metadata/env_uri
ENV_VERSION_FILE_PATH=/opt/deeplearning/Metadata/env_version
FRAMEWORK_FILE_PATH=/opt/deeplearning/Metadata/framework
INFOPATH=/home/linuxbrew/.linuxbrew/share/info:
JUPYTER_DEPS_PATH=/opt/deeplearning/jupyter
LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/nccl2/lib:/usr/local/cuda/extras/CUPT
I/lib64
MANPATH=/home/linuxbrew/.linuxbrew/share/man:
PATH=/opt/conda/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbr
ew/sbin:/usr/local/cuda/bin:/opt/conda/bin:/opt/conda/condabin:/usr/lo
cal/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PYTHONPATH=/mnt/disks/mona/SlowFast/slowfast:
REQUESTS_CA_BUNDLE=<not set>
RESTRICTION_TYPE_FILE_PATH=/opt/deeplearning/restriction
SRC_PATH=/opt/deeplearning/src
SSL_CERT_FILE=<not set>
TITLE_FILE_PATH=/opt/deeplearning/Metadata/title
TUTORIALS_PATH=/opt/deeplearning/workspace/tutorials
VERSION_FILE_PATH=/opt/deeplearning/Metadata/version
WORKSPACE_PATH=/opt/deeplearning/workspace
active environment : base
active env location : /opt/conda
shell level : 1
user config file : /home/mona/.condarc
populated config files : /opt/conda/.condarc
conda version : 4.9.2
conda-build version : not installed
python version : 3.7.8.final.0
virtual packages : __cuda=11.0=0
__glibc=2.28=0
__unix=0=0
__archspec=1=x86_64
base environment : /opt/conda (writable)
channel URLs : https://conda.anaconda.org/conda-forge/linux-64
https://conda.anaconda.org/conda-forge/noarch
https://repo.anaconda.com/pkgs/main/linux-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/linux-64
https://repo.anaconda.com/pkgs/r/noarch
package cache : /opt/conda/pkgs
/home/mona/.conda/pkgs
envs directories : /opt/conda/envs
/home/mona/.conda/envs
platform : linux-64
user-agent : conda/4.9.2 requests/2.24.0 cpython/3.7.8 Linux/4.19.0-13-cloud-amd64 debian/10 glibc/2.28
UID:GID : 1016:1017
netrc file : None
offline mode : False
An unexpected error has occurred. Conda has prepared the above report.
If submitted,this report will be used by core maintainers to improve
future releases of conda.
Would you like conda to send this report to the core maintainers?
[y/N]: y
Upload successful.
Thank you for helping to improve conda.
Opt-in to always sending reports (and not see this message again)
by running
$ conda config --set report_errors true
$ conda config --set report_errors true
$ conda env create -f environment.yml
# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<
Traceback (most recent call last):
File "/opt/conda/lib/python3.7/site-packages/conda/exceptions.py",column 11:
channels: !!python/tuple
^ (line: 2)
`$ /opt/conda/bin/conda-env create -f environment.yml`
environment variables:
BINARIES_PATH=/opt/deeplearning/binaries
CIO_TEST=<not set>
CONDA_AUTO_UPDATE_CONDA=false
CONDA_DEFAULT_ENV=base
CONDA_EXE=/opt/conda/bin/conda
CONDA_MKL_INTERFACE_LAYER_BACKUP=
CONDA_PREFIX=/opt/conda
CONDA_PROMPT_MODIFIER=(base)
CONDA_PYTHON_EXE=/opt/conda/bin/python
CONDA_ROOT=/opt/conda
CONDA_SHLVL=1
CURL_CA_BUNDLE=<not set>
DL_BIN_PATH=/opt/deeplearning/bin
DL_MetaDATA_PATH=/opt/deeplearning/Metadata
DL_PATH=/opt/deeplearning
ENV_URI_FILE_PATH=/opt/deeplearning/Metadata/env_uri
ENV_VERSION_FILE_PATH=/opt/deeplearning/Metadata/env_version
FRAMEWORK_FILE_PATH=/opt/deeplearning/Metadata/framework
INFOPATH=/home/linuxbrew/.linuxbrew/share/info:
JUPYTER_DEPS_PATH=/opt/deeplearning/jupyter
LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/nccl2/lib:/usr/local/cuda/extras/CUPT
I/lib64
MANPATH=/home/linuxbrew/.linuxbrew/share/man:
PATH=/opt/conda/bin:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbr
ew/sbin:/usr/local/cuda/bin:/opt/conda/bin:/opt/conda/condabin:/usr/lo
cal/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PYTHONPATH=/mnt/disks/mona/SlowFast/slowfast:
REQUESTS_CA_BUNDLE=<not set>
RESTRICTION_TYPE_FILE_PATH=/opt/deeplearning/restriction
SRC_PATH=/opt/deeplearning/src
SSL_CERT_FILE=<not set>
TITLE_FILE_PATH=/opt/deeplearning/Metadata/title
TUTORIALS_PATH=/opt/deeplearning/workspace/tutorials
VERSION_FILE_PATH=/opt/deeplearning/Metadata/version
WORKSPACE_PATH=/opt/deeplearning/workspace
active environment : base
active env location : /opt/conda
shell level : 1
user config file : /home/mona/.condarc
populated config files : /opt/conda/.condarc
/home/mona/.condarc
conda version : 4.9.2
conda-build version : not installed
python version : 3.7.8.final.0
virtual packages : __cuda=11.0=0
__glibc=2.28=0
__unix=0=0
__archspec=1=x86_64
base environment : /opt/conda (writable)
channel URLs : https://conda.anaconda.org/conda-forge/linux-64
https://conda.anaconda.org/conda-forge/noarch
https://repo.anaconda.com/pkgs/main/linux-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/linux-64
https://repo.anaconda.com/pkgs/r/noarch
package cache : /opt/conda/pkgs
/home/mona/.conda/pkgs
envs directories : /opt/conda/envs
/home/mona/.conda/envs
platform : linux-64
user-agent : conda/4.9.2 requests/2.24.0 cpython/3.7.8 Linux/4.19.0-13-cloud-amd64 debian/10 glibc/2.28
UID:GID : 1016:1017
netrc file : None
offline mode : False
An unexpected error has occurred. Conda has prepared the above report.
Upload successful.
这是我用来创建 conda 环境的存储库中的 environment.yml
文件:
name: kinetics
channels: !!python/tuple
- !!python/unicode
'defaults'
dependencies:
- joblib=0.9.4=py27_0
- menpo::ffmpeg=3.1.3=0
- mkl=2017.0.1=0
- numpy=1.12.1=py27_0
- openssl=1.0.2k=1
- pandas=0.19.2=np112py27_1
- pip=9.0.1=py27_1
- python=2.7.13=0
- python-dateutil=2.6.0=py27_0
- pytz=2017.2=py27_0
- readline=6.2=2
- setuptools=27.2.0=py27_0
- six=1.10.0=py27_0
- sqlite=3.13.0=0
- tk=8.5.18=0
- wheel=0.29.0=py27_0
- zlib=1.2.8=3
- pip:
- decorator==4.0.11
- olefile==0.44
- youtube-dl==2017.6.5
prefix: /home/cabaf/.conda/envs/kinetics
解决方法
我遇到了同样的问题。删除 !!python/tuple
和 !!python/unicode
不一定能解决问题。无需在 conda 环境中运行它。我 pip 安装了 ActivityNet/Crawler/Kinetics/download.py
顶部列出的所有软件包,使用 apt -y update && apt -y install ffmpeg
下载了 ffmpeg,并运行了 python download.py ./data/kinetics-400_train.csv ./DirName
,这对我有用(我还通过添加 {{ 1}} 在 os.remove(output_filename)
中,当 ffmpeg 抛出错误时)。
似乎 environment.yml
是在 conda 使用 yaml.load
时编写的,但它 has since switched to yaml.safe_load
:
1.1.1 (2019-03-22)
使用 yaml.safe_load 而不是 yaml.load 删除 yaml 加载警告。 修复当包含为空时 NoneType 对象不可迭代错误。
您可以尝试从 !!python/tuple
中删除 !!python/unicode
(还有 environment.yml
,它没有任何作用)但是不清楚为什么它首先存在,它可能会给你另一个错误。
!!python/tuple
做了什么,它指示 YAML 加载以下序列而不是列表,而是元组。这样做的一个原因是当加载的值将用于散列数据结构(dict 或 set)时,因为元组是可散列的,而列表则不是。然而,这通常是在 YAML 文件中已经使用了值的映射时完成的,这里不是这种情况。
出现错误的原因是因为 yaml.safe_load
使用了安全加载器,它不像旧的“危险”加载器那样调用任意构造函数(因为这是一个安全问题)。因此,您不能使用它加载元组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。