我有一个离线设备,我想将整个 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
看起来 ipython 内核的启动命令有一个针对特定环境位置进行硬编码的文件引用。 我认为尝试复制整个环境不会有运气。
您可以做什么,它复制索引缓存,复制包 .tar.bz2/.conda 文件,并为您的环境创建环境规范文件 (yaml)。 然后您可以将所有这些内容以及 miniconda 的副本移至新计算机。
安装 miniconda,然后使用 miniconda 中的 conda 版本,使用已下载的缓存和文件以离线模式创建环境。
(注意:此安装说明适用于 Windows;对于 Linux,请使用
cp
代替 copy
并翻转反斜杠以向前。)
步骤:
mkdir envpack
mv path\to\downloads\Miniconda3-latest-Windows-x86_64.exe envpack
conda clean -a -y
conda create -n myenv python jupyter pandas -y
conda env export -n myenv > envpack\myenv.yaml
envpack
目录移动到便携式媒体,传输到新设备,然后安装 miniconda。pkgs_dirs
目录。
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 存档文件(其他目录仍然存在)。
mkdir envpack\pkgs
pkgs_dirs
行):
copy C:\Users\James\miniconda3\pkgs\*.conda envpack\pkgs
copy C:\Users\James\miniconda3\pkgs\*.tar.bz2 envpack\pkgs
cache
子文件夹并将文件复制到以下文件夹中:
mkdir envpack\pkgs\cache
copy C:\Users\James\miniconda3\pkgs\cache envpack\pkgs\cache
对于步骤 7,我假设您有一种方法可以将文件复制到 USB 驱动器(或任何介质),并可以将其传输到离线设备。 我将使用
Z:\envpack
来指代便携式媒体上文件的位置。
z:\envpack\Miniconda3-latest-Windows-x86_64.exe
安装 miniconda。conda config --show pkgs_dirs
C:\Users\username\miniconda3\pkgs
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
conda env create --use-index-cache --offline --file Z:\envpack\myenv.yaml -n myenv