#python #python-3.x #jupyter-notebook
#python #python-3.x #jupyter-записная книжка
Вопрос:
Я использую пакет remote_ikernel
для автоматического подключения к виртуальной машине Azure с виртуальной машины Azure. Две системы идентичны, то есть они имеют одинаковые среды python.
Я запускаю удаленное ядро с помощью
ssh -oStrictHostKeyChecking=no {username}@{ip} sudo /anaconda/envs/py36/bin/ipython kernel
А затем обновите мой локальный kernel.json
файл, заполнив параметры в приведенном ниже скрипте.
{{
"argv": [
"/anaconda/envs/py35/bin/python",
"-m",
"remote_ikernel",
"--interface",
"ssh",
"--host",
"{username}@{ip}",
"--kernel_cmd",
"/anaconda/envs/{remote_python}/bin/ipython kernel -f {{host_connection_file}}",
"{{connection_file}}"
],
"display_name": "SSH {username}@{kernel_name}",
"remote_ikernel_argv": [
"/anaconda/envs/py35/bin/remote_ikernel",
"manage",
"--add",
"--kernel_cmd=/anaconda/envs/{remote_python}/bin/ipython kernel -f {{connection_file}}",
"--name=Remote VM",
"--interface=ssh",
"--host={username}@{ip}"
]
}}
Первая попытка
Однако мы хотим использовать не удаленный /anaconda/envs/py35/bin/python
, а его py36
брата. Я надеялся решить эту проблему, настроив ее в 1-й команде, но это ничего не решает. Это также не помогло изменить что-либо py35
в kernel.json. Как мы можем этого добиться?
Вторая попытка (редактирование) Я адаптировал kernel.json
, чтобы включить указатель на py36
среду. Смотрите обновленную версию выше. Приведенный ниже журнал выглядит нормально, но import sys; sys.executable
по-прежнему показывает py35
версию.
[I 11:54:57.549 remote_ikernel] Launching kernel over SSH.
[I 11:54:57.549 remote_ikernel] Login command: 'ssh -o StrictHostKeyChecking=no username@ip'.
[I 11:54:57.889 remote_ikernel] Established connection; starting kernel.
[I 11:54:57.889 remote_ikernel] Current working directory /data/projects/...
[I 11:54:58.040 remote_ikernel] Running kernel command: '/anaconda/envs/py36/bin/ipython kernel -f ./rik_kernel-40d44e0d-4dac-4939-b018-74f4c82b6855.json'.
[I 11:54:59.357 NotebookApp] Adapting to protocol v5.1 for kernel 40d44e0d-4dac-4939-b018-74f4c82b6855
[I 11:54:59.358 NotebookApp] Restoring connection for 40d44e0d-4dac-4939-b018-74f4c82b6855:d877b8cff59245bf9ca5811d9310ee7f
[I 11:54:59.358 NotebookApp] Replaying 7 buffered messages
[I 11:55:28.382 remote_ikernel] Setting up tunnels on ports: 57033, 45674, 57305, 38105, 56085.
С отображением файла удаленного ядра
{
"shell_port": 45674,
"iopub_port": 57305,
"stdin_port": 38105,
"control_port": 56085,
"hb_port": 57033,
"ip": "127.0.0.1",
"key": "9e336436-...",
"transport": "tcp",
"signature_scheme": "hmac-sha256",
"kernel_name": ""
}
Ответ №1:
Это то kernel_cmd
, что запускается после установления удаленного подключения, поэтому, чтобы получить версию ipython py36 на удаленном компьютере, ваш kernel.json
должен выглядеть больше как:
{
"argv": [
"/anaconda/envs/py35/bin/python",
"-m",
"remote_ikernel",
"--interface",
"ssh",
"--host",
"{username}@{ip}",
"--kernel_cmd",
"/anaconda/envs/py36/bin/ipython kernel -f {host_connection_file}",
"{connection_file}"
],
"display_name": "SSH {username}@{kernel_name}",
"remote_ikernel_argv": [
"/anaconda/envs/py35/bin/remote_ikernel",
"manage",
"--add",
"--kernel_cmd=/anaconda/envs/py36/bin/ipython kernel -f {connection_file}",
"--name=Remote VM",
"--interface=ssh",
"--host={username}@{ip}"
]
}
Это должно быть так же, как если бы вы вызывали remote_ikernel
с помощью командной строки:
remote_ikernel manage --add --kernel_cmd="/anaconda/envs/py36/bin/ipython kernel -f {connection_file}" --name="Remote VM" --interface=ssh --host={username}@{ip}
Комментарии:
1. Хм, я только что попробовал это, но когда я выполняю
import sys; print(sys.executable)
, я все еще нахожусь в удаленнойpy35
среде.2. Немного обновил мой вопрос 🙂
Ответ №2:
Не уверен, что это все еще актуально, но на всякий случай:
используйте эту --remote-precmd
опцию при добавлении своего ядра.
Согласно документам:
Команда для выполнения на удаленном хосте перед запуском ядра, но после перехода в рабочий каталог.
Вы можете использовать эту опцию для активации необходимой среды:
--remote-precmd=source %PathToVenv%/Scripts/activate
Я использую его, и он работает с remote_ikernel версии 0.4.6, а мой пульт — Windows 10.
Для Windows команда будет выглядеть примерно так:
--remote-precmd=%PathToVenv%\Scripts\activate.bat
Комментарии:
1. Когда вы пишете «Согласно документам», полезно добавить ссылку на раздел, содержащий ваше предложение
2. Добавлена ссылка на главную страницу проекта