【问题标题】:How does one fix the issue of not writable paths with conda?如何解决 conda 不可写路径的问题?
【发布时间】:2020-01-06 21:50:09
【问题描述】:

为什么我在使用 conda 时会看到以下错误(通常是在安装软件包或制作新环境时)以及如何修复它:

Verifying transaction: | WARNING conda.core.path_actions:verify(963): Unable to create environments file. Path not writable.
  environment location: /Users/brandomiranda/.conda/environments.txt

Preparing transaction: done
Verifying transaction: - WARNING conda.core.path_actions:verify(963): Unable to create environments file. Path not writable.
  environment location: /Users/brandomiranda/.conda/environments.txt

done
Executing transaction: - WARNING conda.core.envs_manager:register_env(52): Unable to register environment. Path not writable or missing.
  environment location: /Users/brandomiranda/miniconda3/envs/myenv
  registry file: /Users/brandomiranda/.conda/environments.txt
done

我所做的详细概述可以在以下 gitissue 上找到:

https://github.com/conda/conda/issues/7267

除了从头开始重新安装 conda 并运行以下命令之外,这真的没什么太花哨的:

bash Miniconda3-latest-MacOSX-x86_64.sh

它安装了这个版本的 conda:

❯ conda -V
conda 4.7.12

导致我出现警告的命令示例:

conda create -n myenv python=3.6

使用 conda 安装软件包时出现更多错误:

Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /Users/brandomiranda/miniconda3/envs/automl

  added / updated specs:
    - jupyterlab


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    jupyter_client-5.3.4       |           py37_0         131 KB  conda-forge
    ------------------------------------------------------------
                                           Total:         131 KB

The following NEW packages will be INSTALLED:

  appnope            conda-forge/osx-64::appnope-0.1.0-py37_1000
  attrs              conda-forge/noarch::attrs-19.3.0-py_0
  backcall           conda-forge/noarch::backcall-0.1.0-py_0
  bleach             conda-forge/noarch::bleach-3.1.0-py_0
  decorator          conda-forge/noarch::decorator-4.4.1-py_0
  defusedxml         conda-forge/noarch::defusedxml-0.6.0-py_0
  entrypoints        conda-forge/osx-64::entrypoints-0.3-py37_1000
  importlib_metadata conda-forge/osx-64::importlib_metadata-1.3.0-py37_0
  ipykernel          conda-forge/osx-64::ipykernel-5.1.3-py37h5ca1d4c_0
  ipython            conda-forge/osx-64::ipython-7.11.1-py37h5ca1d4c_0
  ipython_genutils   conda-forge/noarch::ipython_genutils-0.2.0-py_1
  jedi               conda-forge/osx-64::jedi-0.15.2-py37_0
  jinja2             conda-forge/noarch::jinja2-2.10.3-py_0
  json5              conda-forge/noarch::json5-0.8.5-py_0
  jsonschema         conda-forge/osx-64::jsonschema-3.2.0-py37_0
  jupyter_client     conda-forge/osx-64::jupyter_client-5.3.4-py37_0
  jupyter_core       conda-forge/osx-64::jupyter_core-4.6.1-py37_0
  jupyterlab         conda-forge/noarch::jupyterlab-1.2.4-py_0
  jupyterlab_server  conda-forge/noarch::jupyterlab_server-1.0.6-py_0
  libsodium          conda-forge/osx-64::libsodium-1.0.17-h01d97ff_0
  markupsafe         conda-forge/osx-64::markupsafe-1.1.1-py37h0b31af3_0
  mistune            conda-forge/osx-64::mistune-0.8.4-py37h0b31af3_1000
  more-itertools     conda-forge/noarch::more-itertools-8.0.2-py_0
  nbconvert          conda-forge/osx-64::nbconvert-5.6.1-py37_0
  nbformat           conda-forge/noarch::nbformat-5.0.3-py_0
  notebook           conda-forge/osx-64::notebook-6.0.1-py37_0
  pandoc             conda-forge/osx-64::pandoc-2.9.1.1-0
  pandocfilters      conda-forge/noarch::pandocfilters-1.4.2-py_1
  parso              conda-forge/noarch::parso-0.5.2-py_0
  pexpect            conda-forge/osx-64::pexpect-4.7.0-py37_0
  pickleshare        conda-forge/osx-64::pickleshare-0.7.5-py37_1000
  prometheus_client  conda-forge/noarch::prometheus_client-0.7.1-py_0
  prompt_toolkit     conda-forge/noarch::prompt_toolkit-3.0.2-py_0
  ptyprocess         conda-forge/noarch::ptyprocess-0.6.0-py_1001
  pygments           conda-forge/noarch::pygments-2.5.2-py_0
  pyrsistent         conda-forge/osx-64::pyrsistent-0.15.7-py37h0b31af3_0
  python-dateutil    conda-forge/noarch::python-dateutil-2.8.1-py_0
  pyzmq              pkgs/main/osx-64::pyzmq-18.1.0-py37h0a44026_0
  send2trash         conda-forge/noarch::send2trash-1.5.0-py_0
  terminado          conda-forge/osx-64::terminado-0.8.3-py37_0
  testpath           conda-forge/noarch::testpath-0.4.4-py_0
  tornado            conda-forge/osx-64::tornado-6.0.3-py37h0b31af3_0
  traitlets          conda-forge/osx-64::traitlets-4.3.3-py37_0
  wcwidth            conda-forge/noarch::wcwidth-0.1.8-py_0
  webencodings       conda-forge/noarch::webencodings-0.5.1-py_1
  zeromq             conda-forge/osx-64::zeromq-4.3.2-h6de7cb9_2
  zipp               conda-forge/noarch::zipp-0.6.0-py_0

The following packages will be UPDATED:

  ca-certificates    pkgs/main::ca-certificates-2019.11.27~ --> conda-forge::ca-certificates-2019.11.28-hecc5488_0

The following packages will be SUPERSEDED by a higher-priority channel:

  certifi                                         pkgs/main --> conda-forge
  openssl              pkgs/main::openssl-1.1.1d-h1de35cc_3 --> conda-forge::openssl-1.1.1d-h0b31af3_0



Proceed ([y]/n)? y


Downloading and Extracting Packages
jupyter_client-5.3.4 | 131 KB    | ################################################################################################################################################################# | 100%
Preparing transaction: done
Verifying transaction: | WARNING conda.core.path_actions:verify(963): Unable to create environments file. Path not writable.
  environment location: /Users/brandomiranda/.conda/environments.txt

done
Executing transaction: - WARNING conda.core.envs_manager:register_env(52): Unable to register environment. Path not writable or missing.
  environment location: /Users/brandomiranda/miniconda3/envs/automl
  registry file: /Users/brandomiranda/.conda/environments.txt
done

我运行的命令:

(automl) brandomiranda~/automl-meta-learning ❯ conda install -c conda-forge jupyterlab

我尝试根据建议的答案更改权限,但似乎没有 sudo 将无法正常工作。在这里做 sudo 真的安全吗?为什么它不能写入正确的用户组?

(automl) brandomiranda~/.conda ❯ if [ -w "/Users/brandomiranda/.conda" ]; then echo "WRITABLE"; else echo "NOT WRITABLE"; fi
NOT WRITABLE
(automl) brandomiranda~/.conda ❯ chmod 775 /Users/brandomiranda/.conda
chmod: Unable to change file mode on /Users/brandomiranda/.conda: Operation not permitted

运行建议的答案后更新

我已经在 sudo 中运行了 chmod 命令。我检查了该文件的权限,得到以下信息:

(automl-meta-learning) brandomiranda~/automl-meta-learning/automl/automl ❯ ls -lha /Users/brandomiranda/.conda                                                        
total 8
drwxrwxr-x    3 root           staff    96B Jan  5 16:57 .
drwxr-xr-x+ 117 brandomiranda  staff   3.7K Jan 19 17:25 ..
-rw-r--r--    1 root           staff    32B Jan  5 16:57 environments.txt

我检查了这个,因为我尝试使用conda install conda-build 命令安装conda-build,但最后出现错误:

Preparing transaction: done
Verifying transaction: \ WARNING conda.core.path_actions:verify(963): Unable to create environments file. Path not writable.
  environment location: /Users/brandomiranda/.conda/environments.txt
                                                                                                                                                                                                                                                                       done
Executing transaction: \ WARNING conda.core.envs_manager:register_env(52): Unable to register environment. Path not writable or missing.
  environment location: /Users/brandomiranda/miniconda3/envs/automl-meta-learning
  registry file: /Users/brandomiranda/.conda/environments.txt                                                                                                                                                                                                          done

这看起来很奇怪,当我注意到environment.txt 没有与其他文件/目录相同的权限时。我也很想对那个文件进行 chmod,但所有这些业务似乎都在给这个问题贴上绷带。我觉得这本来就不应该发生,所以我会问:

  • 我们如何正确解决此问题?
  • 假设如何安装 conda(在新的 Catalina OS for Mac 中使用 zsh)?
  • 无论如何,/Users/brandomiranda/.conda conda 文件夹的权限应该是什么?所有文件夹/文件都应该具有相同的权限吗?

现在我将运行:

sudo chmod 775 /Users/brandomiranda/.conda/environments.txt

尽管如此,我不得不为 conda 相关的东西运行 sudo 让我感到不安。任何人都知道如何在不需要 sudo 的情况下执行此操作,或者应该需要 sudo 吗?

作为旁注,我很高兴我从未尝试使用 sudo 从 conda 安装任何东西,并且只更改了几个文件夹/文件的权限。这似乎比允许 conda 在 sudo 中运行任意代码要安全得多(相反,它可以将其内容运行到特定位置,而不是在 sudo 中运行,所以我猜更改文件夹权限不是那么糟糕?)。

【问题讨论】:

  • 你在运行什么 conda 命令?
  • @James 刚刚创建了一个环境:conda create -n myenv python=3.6
  • 有人知道,conda 文件夹的默认权限通常是什么?

标签: python anaconda conda


【解决方案1】:

参考:https://gist.github.com/zoka123/f2b03f19924258d28441fe2d88750145

检查路径是否可写:

if [ -w "./.conda" ]; then echo "WRITABLE"; else echo "NOT WRITABLE"; fi

如果它不可写,则将可写性更改为任何人:

chmod 775 ./.conda

如果您对现有文件权限感到好奇:

ls -lha输出当前位置的访问权限集合,其中d指的是当前目录。 例如:drwxr-xr-x

每个数字分别代表用户、组和全局的权利。对于上面的例子, rwx 表示当前用户可以读、写和执行; r-x 用于组和全局,这意味着它们只能读取和执行。

chmod 与 3 位命令一起使用,每个位指的是上述三种身份的 read, write, execute 访问权限的一个组合。

755 表示 rwx 表示当前用户,r-x 表示组和全局。

您可以参考https://www.linode.com/docs/tools-reference/tools/modify-file-permissions-with-chmod/

【讨论】:

  • 抱歉回复晚了。在没有访问互联网的情况下进行了一次旅行。无论如何,.conda 文件应该在哪里?
  • conda 文件夹的默认权限通常是什么?
  • 很奇怪,它不允许我这样做。 sudo 命令让我很紧张。这真的是我应该做的吗?那安全吗? (automl) brandomiranda~/.conda ❯ chmod 775 /Users/brandomiranda/.conda chmod: Unable to change file mode on /Users/brandomiranda/.conda: Operation not permitted
  • 感谢您的详细回答!尚不清楚的是在这种情况下使用 sudo 是否安全。是吗?
  • chmod 775 ./.conda 缺少 -R,因为错误为:Executing transaction: | WARNING conda.core.envs_manager:register_env(50): Unable to register environment. Path not writable or missing.,但在以下位置:registry file: $HOME/.conda/environments.txt。我跑去修复的是:$ sudo chmod -R 775 ~/.conda
【解决方案2】:

作为替代解决方案,我将~/.conda所有者更改为我自己:

$ chown -R $USER ~/.conda

我认为问题的根本原因(至少在我的情况下)是~/.conda 出于某种原因归root 所有。其他解决方案建议将其访问权限设置为更宽松(向组甚至所有人开放写入)作为一种解决方法。虽然在技术上应该可行,但我认为更改所有者(并保留现有权限)是一种更安全的方法。

【讨论】:

  • 感谢这个作品
  • 同意更改所有权优于限制较少的权限。这也是我的解决方案。
【解决方案3】:

递归地添加用户对目录的写权限:

chmod -R u+w /Users/brandomiranda/.conda

【讨论】:

  • conda 文件夹的默认权限通常是什么?
  • 很奇怪,它不允许我这样做。 sudo 命令让我很紧张。这真的是我应该做的吗?那安全吗? (automl) brandomiranda~/.conda ❯ chmod 775 /Users/brandomiranda/.conda chmod: Unable to change file mode on /Users/brandomiranda/.conda: Operation not permitted
  • 您可能需要运行ls -lA /Users/brandomiranda/.conda 来检查您的用户ID 是否是目录/文件夹的所有者。
  • 好像 root 拥有它:(automl-meta-learning) brandomiranda~ ❯ ls -lA /Users/brandomiranda/.conda total 8 -rw-r--r-- 1 root staff 32 Jan 5 16:57 environments.txt 为什么?这不是很奇怪吗?有什么可疑的事情吗?
  • @CharlieParker 你是不是先用root用户安装conda,然后放到用户目录下?
【解决方案4】:

我运行了投票最多的答案,但是因为 chmod 命令没有递归标志,所以它不起作用,后来给我带来了问题(因为我当然没有更改 conda 文件夹中所有内容的权限):

所以递归地更改目录的权限:

sudo chmod -R 775 /Users/brandomiranda/.conda

当然,将/Users/brandomiranda/ 换成.conda 的路径。


如果您担心使用sudo,我相信运行它并没有那么糟糕,因为我们只是更改了一个非常特定目录的权限(这比运行任何conda 命令要安全得多)须藤!)

事实是,尽管我(我相信)使用 conda .sh 脚本正确安装 conda,但我不知道为什么会出现问题,正如我在问题中概述的那样。解决这是我假设的真正解决方案,但我不知道如何解决(我想我可以尝试再次重新安装......)

【讨论】:

    【解决方案5】:

    如果您在 Mac 上并已从 GUI 安装 Anaconda。试试

    opt/anaconda3/文件夹的权限改为Read & write

    这解决了我的问题。

    【讨论】:

    • @CharlieParker 我是手动完成的。我的意思是通过GUI。打开文件夹 -> 获取信息 -> 在下面更改为“读写”。希望这会有所帮助。
    • 我们是否应该更改每个人的权限,因为对我来说它是读和写,它仍然给出这个错误?错误:“创建环境文件。路径不可写。环境位置:/Users/lovely/.conda/environments.txt”
    • @AmishaKirti 尝试更改为所有人并检查。如果没有重启 anaconda。
    【解决方案6】:

    正如我在conda #7267 github issue 中所说,我在 Ubuntu 上遇到了同样的问题,因为我以超级用户身份安装了 Anaconda: sudo bash Anaconda3-2019.10-Linux-x86_64.sh

    [解决方案 Ubuntu] 删除 Anaconda 并在没有超级用户权限的情况下安装它:

    sudo rm -rf ~/anaconda3
    bash Anaconda3-2019.10-Linux-x86_64.sh
    

    这解决了问题。

    【讨论】:

    • sh Anaconda3-2019.10-Linux-x86_64.shbash Anaconda3-2019.10-Linux-x86_64.sh 做什么比较好?
    • Anaconda 文档建议运行 bash Anaconda-latest-Linux-x86_64.sh,这就是我这样做的原因 (Installing Anaconda on Linux)。
    猜你喜欢
    • 2019-10-24
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2019-05-23
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多