从 tar.gz 文件离线创建新的 conda 环境

问题描述 投票:0回答:1

我有一个离线设备,我想将整个 conda 环境转移到该设备上。我在在线设备上创建了环境,然后通过

tar.gz
文件将其传输到离线计算机。然后我就跑了
tar -xzf transfer_env.tar.gz -C transfer_env
。这似乎工作正常,我能够激活环境
conda activate transfer_env
。然而,当我尝试运行
jupyter notebook
时,我遇到了一个巨大的错误。我不确定如何解决这个问题,因为我在环境中安装了
ipykernel
jupyter
nb_conda_kernels
。当我运行
where python
时,我得到
C:\Users\my_user\.conda\envs\transer_env\python.exe
,这看起来很好(即在环境内)。 Jupyter 笔记本出了什么问题?

这是错误:

Failed to run command:
    ['D:\\bld\\ipykernel_1719845595208\\_h_env\\python.exe', '-m', 'ipykernel_launcher', '-f', 'C:\\Users\\my_user\\AppData\\Roaming\\jupyter\\runtime\\kernel-d65a656a-77ed-4349-8cec-7aa12beb4955.json']

[E 2024-10-21 10:29:12.679 ServerApp] [WinError 2] The system cannot find the file specified
    Traceback (most recent call last):
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\site-packages\jupyter_client\manager.py", line 87, in wrapper
        out = await method(self, *args, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\site-packages\jupyter_client\manager.py", line 439, in _async_start_kernel
        await self._async_launch_kernel(kernel_cmd, **kw)
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\site-packages\jupyter_client\manager.py", line 354, in _async_launch_kernel
        connection_info = await self.provisioner.launch_kernel(kernel_cmd, **kw)
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\site-packages\jupyter_client\provisioning\local_provisioner.py", line 210, in launch_kernel
        self.process = launch_kernel(cmd, **scrubbed_kwargs)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\site-packages\jupyter_client\launcher.py", line 170, in launch_kernel
        raise ex
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\site-packages\jupyter_client\launcher.py", line 155, in launch_kernel
        proc = Popen(cmd, **kwargs)  # noqa
               ^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\subprocess.py", line 1026, in __init__
        self._execute_child(args, executable, preexec_fn, close_fds,
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\subprocess.py", line 1538, in _execute_child
        hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\site-packages\tornado\web.py", line 1790, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\site-packages\jupyter_server\auth\decorator.py", line 73, in inner
        return await out
               ^^^^^^^^^
      File "C:\Users\my_user\.conda\envs\transfer_env\Lib\site-packages\jupyter_server\services\sessions\handlers.py", line 108, in post
        raise web.HTTPError(500, str(e)) from e
    tornado.web.HTTPError: HTTP 500: Internal Server Error ([WinError 2] The system cannot find the file specified)
[E 2024-10-21 10:29:12.821 ServerApp] {
      "Host": "localhost:8888",
      "Accept": "*/*",
      "Referer": "http://localhost:8888/tree/Project/Notebooks/TRANSFER_ENV",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
    }
[E 2024-10-21 10:29:12.821 ServerApp] 500 POST /api/sessions?1729502952612 (06092a48e7ce4843995c6bc813925ade@::1) 187.15ms referer=http://localhost:8888/tree/Project/Notebooks/TRANSFER_ENV

python jupyter-notebook conda
1个回答
0
投票

看起来 ipython 内核的启动命令有一个针对特定环境位置进行硬编码的文件引用。 我认为尝试复制整个环境不会有运气。

您可以做什么,它复制索引缓存,复制包 .tar.bz2/.conda 文件,并为您的环境创建环境规范文件 (yaml)。 然后您可以将所有这些内容以及 miniconda 的副本移至新计算机。

安装 miniconda,然后使用 miniconda 中的 conda 版本,使用已下载的缓存和文件以离线模式创建环境。

概述

(注意:此安装说明适用于 Windows;对于 Linux,请使用

cp
代替
copy
并翻转反斜杠以向前。)

步骤:

  1. 创建一个目录来将所有文件打包到:
    • mkdir envpack
  2. 从以下位置获取 miniconda:Miniconda3-latest-Windows-x86_64.exe
  3. 将安装程序移动到您的打包目录:
    • mv path\to\downloads\Miniconda3-latest-Windows-x86_64.exe  envpack
  4. 使用以下命令清除 conda 缓存(这是为了使传输包文件的大小合理):
    • conda clean -a -y
  5. 创建您想要克隆的环境(这将下载包和索引文件):
    • conda create -n myenv python jupyter pandas -y
  6. 使用环境规范创建 YAML 文件:
    • conda env export -n myenv > envpack\myenv.yaml
  7. 将索引缓存文件夹和打包文件复制到打包目录:
    • 请参阅下一节
  8. envpack
    目录移动到便携式媒体,传输到新设备,然后安装 miniconda。
  9. 将文件复制到 miniconda 的
    pkgs_dirs
    目录。
    • 参见最后部分
  10. 运行 conda install 进行本地安装。

复制索引缓存和包档案

Conda 将您使用的每个通道的

repodata.json
文件下载到索引缓存中。 它还会在安装之前下载包 .tar.bz2 或 .conda 文件。 这些的位置是返回的第一个目录:

conda config --show pkgs_dirs

输出示例:

pkgs_dirs:
  - C:\Users\James\miniconda3\pkgs   <--- this is the location we need.
  - C:\Users\James\.conda\pkgs
  - C:\Users\James\AppData\Local\conda\conda\pkgs

由于我们在步骤 3 中清除了缓存,因此只有在步骤 4 中下载的包才会有 tarball 或 conda 存档文件(其他目录仍然存在)。

  1. 为包创建一个子文件夹
    • mkdir envpack\pkgs
  2. 复制存档文件(将 C:\Users\James\miniconda3\pkgs 替换为
    pkgs_dirs
    行):
    • copy C:\Users\James\miniconda3\pkgs\*.conda  envpack\pkgs
    • copy C:\Users\James\miniconda3\pkgs\*.tar.bz2  envpack\pkgs
  3. 创建一个
    cache
    子文件夹并将文件复制到以下文件夹中:
    • mkdir envpack\pkgs\cache
    • copy C:\Users\James\miniconda3\pkgs\cache envpack\pkgs\cache

离线安装

对于步骤 7,我假设您有一种方法可以将文件复制到 USB 驱动器(或任何介质),并可以将其传输到离线设备。 我将使用

Z:\envpack
来指代便携式媒体上文件的位置。

  1. 按照您喜欢的方式从
    z:\envpack\Miniconda3-latest-Windows-x86_64.exe
    安装 miniconda。
  2. 安装后,检查conda用于包缓存的位置:
    • conda config --show pkgs_dirs
    • 通常是这样的:
      C:\Users\username\miniconda3\pkgs
  3. 将所有存档文件和索引缓存复制到该位置。
    • copy Z:\envpack\*.conda C:\Users\username\miniconda3\pkgs
    • copy Z:\envpack\*.tar.bz2 C:\Users\username\miniconda3\pkgs
    • mkdir C:\Users\username\miniconda3\pkgs\cache
      (可能已经存在)
    • copy Z:\envpack\cache C:\Users\username\miniconda3\pkgs\cache
  4. 使用规范创建环境:
    • conda env create --use-index-cache --offline --file Z:\envpack\myenv.yaml -n myenv
© www.soinside.com 2019 - 2024. All rights reserved.