如何从 yml 文件创建自定义 python 环境 *with* 下载丢失的包

Posted

技术标签:

【中文标题】如何从 yml 文件创建自定义 python 环境 *with* 下载丢失的包【英文标题】:how to create a custom python environment from yml file *with* downloads of missing packages 【发布时间】:2021-01-06 21:59:09 【问题描述】:

我正在尝试构建一个支持旧 hddm 库的 python 3.5 环境。由于 my/anaconda 明显无法忽略(或降级)10.1 cuda 库以支持与 hddm 一起使用的旧库,因此标准方法失败了。

有一个描述成功环境的 yml 文件。但是广告的命令

conda env 创建-file hddm_py35.yml

失败,错误列出所有“未找到”的包。以下是错误。

(base) PS C:\Users\Peter\anaconda3_Sep2020> conda env create --file .\hddm_py35.yml 收集包元数据(repodata.json):完成 解决环境:失败

ResolvePackageNotFound:

odo==0.5.0=py35_1 cffi==1.7.0=py35_0 莳萝==0.2.5=py35_0 singledispatch==3.4.0.3=py35_0 nb_conda_kernels==2.0.0=py35_0 请求==2.14.2=py35_0 scikit-learn==0.17.1=np111py35_1 wheel==0.29.0=py35_0 绝地==0.9.0=py35_1 widgetsnbextension==1.2.6=py35_0 bitarray==0.8.1=py35_1 theano==1.0.2=py35_0 pytz==2016.6.1=py35_0 pylint==1.5.4=py35_1 ruamel_yaml==0.11.14=py35_0 partd==0.3.6=py35_0 llvmlite==0.13.0=py35_0 multipledispatch==0.4.8=py35_0 pyparsing==2.1.4=py35_0 console_shortcut==0.1.1=py35_1 ipython_genutils==0.1.0=py35_0 patsy==0.4.1=py35_0 pytest==2.9.2=py35_0 heapdict==1.0.0=py35_1 ipywidgets==5.2.2=py35_0 散景==0.12.2=py35_0 hdf5==1.8.15.1=2 networkx==1.11=py35_0 backports==1.0=py35_0 pyasn1==0.1.9=py35_0 pyqt==5.6.0=py35h6538335_6 zlib==1.2.11=hbb18732_2 et_xmlfile==1.0.1=py35_0 traitlets==4.3.0=py35_0 colorama==0.3.7=py35_0 argcomplete==1.0.0=py35_1 pywin32==220=py35_1 astropy==1.2.1=np111py35_0 鼻子==1.3.7=py35_1 freetype==2.8=h0224ed4_1 pkginfo==1.3.2=py35_0 cloudpickle==0.2.1=py35_0 sqlalchemy==1.0.13=py35_0 惰性对象代理==1.2.1=py35_0 markupsafe==0.23=py35_2 prompt_toolkit==1.0.3=py35_0 pickleshare==0.7.4=py35_0 其危险==0.24=py35_0 babel==2.3.4=py35_0 点击==6.6=py35_0 六==1.10.0=py35_0 libdynd==0.7.2=0 jdcal==1.2=py35_1 pymc==2.3.6=np111py35_2 pathlib2==2.1.0=py35_0 astroid==1.4.7=py35_0 numba==0.28.1=np111py35_0 qtconsole==4.2.1=py35_2 wrapt==1.10.6=py35_0 idna==2.1=py35_0 pytables==3.2.2=np111py35_4 _nb_ext_conf==0.3.0=py35_0 dynd-python==0.7.2=py35_0 numexpr==2.6.1=np111py35_0 werkzeug==0.11.11=py35_0 绳子==0.9.4=py35_1 jupyter_client==4.4.0=py35_0 pyzmq==15.4.0=py35_0 python-dateutil==2.5.3=py35_0 beautifulsoup4==4.5.1=py35_0 blaze==0.10.1=py35_0 nbformat==4.1.0=py35_0 nbpresent==3.0.2=py35_0 sip==4.18=py35_0 胸==0.2.3=py35_0 glob2==0.5=py35_0 小盒==0.2.0=py35_1 mistune==0.7.3=py35_0 雪花石膏==0.7.9=py35_0 setuptools==27.2.0=py35_1 win_unicode_console==0.5=py35_0 filelock==2.0.6=py35_0 _license==1.1=py35_1 ipykernel==4.5.0=py35_0 qt==5.6.2=vc14h6f76a7e_12 pep8==1.7.0=py35_0 xlwings==0.10.0=py35_0 spyder==3.0.0=py35_0 xlrd==1.0.0=py35_0 scipy==0.18.1=np111py35_0 dask==0.11.0=py35_0 nbconvert==4.2.0=py35_0 pip==8.1.2=py35_0 mkl==11.3.3=1 nb_anacondacloud==1.2.0=py35_0 cython==0.24.1=py35_0 flask-cors==2.1.2=py35_0 ipython==5.1.0=py35_0 cycler==0.10.0=py35_0 jpeg==9b=he27b436_2 menuinst==1.4.1=py35_0 anaconda==4.2.0=np111py35_0 configobj==5.0.6=py35_0 boto==2.42.0=py35_0 unicodecsv==0.14.1=py35_0 scikit-image==0.12.3=np111py35_1 contextlib2==0.5.3=py35_0 conda-build==3.0.19=py35h15d37ab_0 jinja2==2.8=py35_1 conda-verify==2.0.0=py35_0 get_terminal_size==1.0.0=py35_0 qtpy==1.1.2=py35_0 anaconda-client==1.5.1=py35_0 装饰器==4.0.10=py35_0 ply==3.9=py35_0 openpyxl==2.3.2=py35_0 sockjs-tornado==1.0.3=py35_0 pyyaml==3.12=py35_0 snowballstemmer==1.2.1=py35_0 toolz==0.8.0=py35_0 py==1.4.31=py35_0 xlwt==1.1.2=py35_0 client==1.2.2=py35_0 瓶颈==1.1.0=np111py35_0 jupyter==1.0.0=py35_3 mkl-service==1.1.2=py35_2 simplegeneric==0.8.1=py35_1 wcwidth==0.1.7=py35_0 h5py==2.6.0=np111py35_2 gevent==1.1.2=py35_0 pycrypto==2.6.1=py35_4 datashape==0.5.2=py35_0 psutil==4.3.1=py35_0 nltk==3.2.1=py35_0 jsonschema==2.5.1=py35_0 笔记本==4.2.3=py35_0 pycparser==2.14=py35_1 xlsxwriter==0.9.3=py35_0 jupyter_core==4.2.0=py35_0 qtawesome==0.3.3=py35_0 fastcache==1.0.2=py35_1 jupyter_console==5.0.0=py35_0 龙卷风==4.4.1=py35_0 path.py==8.2.1=py35_0 pyflakes==1.3.0=py35_0 sympy==1.0=py35_0 熊猫==0.20.1=np111py35_0 pygments==2.1.3=py35_0 anaconda-clean==1.0.0=py35_0 mpmath==0.19=py35_1 comtypes==1.1.2=py35_0 密码学==1.5=py35_0 chardet==3.0.4=py35_0 入口点==0.2.2=py35_0 狮身人面像==1.4.6=py35_0 greenlet==0.4.10=py35_0 anaconda-navigator==1.3.1=py35_0 flask==0.11.1=py35_0 pyopenssl==16.2.0=py35_0 lxml==3.6.4=py35_0 icu==58.2=h3fcc66b_1 docutils==0.12=py35_2 statsmodels==0.6.1=np111py35_1 nb_conda==2.0.0=py35_0 imagesize==0.7.1=py35_0

(基础)PS C:\Users\Peter\anaconda3_Sep2020>

失败发生在几秒钟内。我感觉 conda 甚至没有尝试去寻找这些包!?!?

    我应该下载这些包,把它们放在某个地方,然后告诉 conda 在我的硬盘上找到它们吗?

    是否有一个标志告诉 conda 通常对所有“丢失”的包进行查找和加载——但仅限于我所描述的环境中?在我的基础环境 (3.8) 中,我不想降级。

    是否应该创建一个新的 3.5 环境,然后逐个处理列表并手动卸载/删除/降级每个包?

    元问题:这一定是一个常见问题解答,但我无法通过谷歌搜索答案。这通常意味着“从 yaml 文件中安装 conda 环境”的谷歌搜索不包含适当的词汇表,试图诱导 conda 从 yaml 文件安装环境。我应该问什么问题?

【问题讨论】:

我决定尝试手动添加包。第一个包是“odo”,所以 anaconda.org 告诉我版本 0.5 可从“blaze”获得,所以我尝试“conda install -c blaze odo”,发现我刚刚得到的是 0.5.1,而不是 0.5.0 .大鼠。并且该软件包安装在 3.8 而不是 3.5 中。我是 3.5 环境,因为我这样做(激活 hddm_35b)。所以我尝试“conda remove odo”,这似乎有效。 所以我再次尝试使用“conda install -c blaze odo==0.5.0=py35_1”,现在 conda 声称找不到该包。又是老鼠。 “conda install -c blaze odo==0.5.0=py35” 未找到。 “conda install -c blaze odo==0.5.0” 老鼠。大鼠。大鼠。这不是如何做到这一点。 【参考方案1】:
1) Am I supposed to download these packages, put them somewhere, and then 
tell conda to find them on my hard drive?

没有必要。但在 anaconda.org 上搜索版本有助于确定一对一手动下载的渠道。

2) Is there a flag that tells conda to do its usually find-and-load for all 
"missing" packages -- but only in the environment I'm describing? In my base 
environment (3.8) I don't wish to downgrade.

没有证据表明 conda 会自动下载当前环境中缺少的 yaml 文件中列出的文件。

3) Should make a new 3.5 environment and then work through the list one-by-
one and uninstall/remove/downgrade each package by hand?

是的。

4) Meta question: This must be a FAQ, and yet I'm not able to google for the 
answer. That usually means googling for "conda install environment from yaml 
file" doesn't contain the appropriate vocabulary for, well, trying to induce 
conda to install an environment from a yaml file. What question should I have 
asked?

没有证据表明 yaml 文件只是环境中的软件包版本列表。它们不能用于创建新环境(可能除非所有组件都已存在于宿主环境中),因此它们的价值主要是注释性的。很明显。


2020年为hddm做环境的情况,好吧,不要尝试。 Cuda 支持将对您不利。 https://colab.research.google.com/ 有一个 hddm 主机,它已正确配置(没有 cuda 中断),因此您可以使用它来踢轮胎等。让 hddm 在任何其他环境中工作可能需要专用硬件,以便可以操纵 cuda 驱动程序仅适用于此应用程序,不会在此过程中破坏任何其他应用程序。

【讨论】:

以上是关于如何从 yml 文件创建自定义 python 环境 *with* 下载丢失的包的主要内容,如果未能解决你的问题,请参考以下文章

如何从.env文件获取环境变量到docker-compose.yml?

无法从 Spring Boot 应用程序中的自定义 yml 文件加载配置

如何使用 database.yml 为每个环境定义 json 文件

自定义中文验证消息

Symfony 自定义路由加载器:导入错误

GCP Dataproc 自定义图像 Python 环境