Suivez les étapes ci-dessous pour créer un environnement de débogage à l'aide de Jupyter Lab et VS Code.
Si vous regardez la vidéo ci-dessous, vous pouvez avoir une idée de ce que vous pouvez faire.
Dans VS Code, en utilisant un mécanisme appelé développement à distance, vous pouvez modifier les dossiers et les fichiers sur le serveur distant presque de la même manière que sur votre PC local en vous connectant avec ssh. Voir ici pour plus de détails. --VS Code vous permet d'attacher et de déboguer des processus Python sur le serveur distant en installant un package appelé ptvsd sur le serveur distant. Voir ici pour plus de détails.
# apt-get update
# apt-get install -y wget
# apt-get install -y language-pack-ja
# apt-get install -y ssh
# apt-get install -y git
# update-locale LANG=ja_JP.UTF-8
Requis pour installer l'extension JupyterLab. Cette étape n'est pas nécessaire si vous souhaitez simplement définir le noyau, mais il est préférable de la prendre en charge pour une utilisation pratique de Jupyter Lab.
# curl -sL https://deb.nodesource.com/setup_12.x | bash -
# apt-get install -y nodejs
# pip install -r requirements.txt
requirements.txt
numpy==1.16.3
matplotlib==3.0.3
scikit_learn==0.20.3
jupyterlab==1.0.2
ptvsd==4.3.2
Requis pour se connecter à un serveur distant à partir de VS Code pour le développement à distance. Cette fois, ouvrez le port ssh sur le port 19205.
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org
# sed -e s/#Port/Port/g /etc/ssh/sshd_config.org | sed -e s/22/19205/g > /etc/ssh/sshd_config
Ensuite, démarrez ssh.
root@25fa703a90c4:/tf# service ssh start
* Starting OpenBSD Secure Shell server sshd [ OK ]
Ensuite, configurez Jupyter Lab. Cette fois, nous allons démarrer le serveur jupyterLab en tant qu'utilisateur jupyter.
Tout d'abord, en préparation, changez la propriété du répertoire / usr / local / share / jupyter / lab en jupyter. Si vous ne le faites pas, vous ne pourrez pas installer les extensions de JupyterLab au démarrage en tant qu'utilisateur jupyter, ce qui n'est pas pratique. Je pense qu'il existe un meilleur moyen (par exemple, conservez ces fichiers dans votre répertoire personnel). Ici, je vais changer la propriété facilement ci-dessous.
# chown -R jupyter:jupyter /usr/local/share/jupyter/lab
Tout d'abord, enregistrez le fichier suivant sous le nom de fichier /usr/local/share/jupyter/kernels/ptvsd/kernel.json afin de pouvoir appeler l'interpréteur pour le débogage depuis JupyterLab. (La méthode d'appel de l'interpréteur défini ici à partir de JupyterLab sera expliquée plus tard.)
kernel.json
{
"argv": [
"/usr/bin/python3",
"-m",
"ptvsd",
"--host",
"0.0.0.0",
"--port",
"19204",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python3 Debug",
"language": "python"
}
C'est comme ça.
root@25fa703a90c4:/usr/local/share/jupyter/kernels# pwd
/usr/local/share/jupyter/kernels
root@25fa703a90c4:/usr/local/share/jupyter/kernels# mkdir ptvsd
root@25fa703a90c4:/usr/local/share/jupyter/kernels# cd ptvsd
root@25fa703a90c4:/usr/local/share/jupyter/kernels/ptvsd# cat > kernel.json <<EOL
{
"argv": [
"/usr/bin/python3",
"-m",
"ptvsd",
"--host",
"0.0.0.0",
"--port",
"19204",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python3 Debug",
"language": "python"
}
EOL
root@25fa703a90c4:/usr/local/share/jupyter/kernels/ptvsd# ls kernel.json
kernel.json
Ceci termine les paramètres de Jupyter Lab.
Ensuite, définissez les paramètres de développement à distance avec VS Code.
Tout d'abord, si vous ne l'avez pas déjà fait, vous devez vous préparer à l'échange de clés afin de pouvoir vous connecter au serveur distant depuis votre PC local avec ssh. Je vais omettre la procédure détaillée, mais je pense que ici etc. sera utile.
Suivez ces étapes (https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) pour installer le pack d'extension de développement à distance dans Visual Studio.
Suivez les étapes ci-dessous pour vous connecter à un serveur distant à partir de VS Code 1 et modifier les dossiers et fichiers. (À partir de la deuxième fois, vous pouvez également vous connecter à l'aide des paramètres enregistrés.)
ssh user@nom d'hôte-nom du port p
5. Spécifiez l'emplacement d'enregistrement des paramètres ssh (en général, spécifiez celui sous le dossier personnel)
6. Cliquez sur le bouton "Connecter" dans la boîte de dialogue affichée en bas à droite
Ensuite, installez l'extension Python pour Visual Studio Code à partir de ici pour déboguer Python sur VS Code.
Ceci termine la connexion de VS Code au serveur distant. Cette procédure vous permet d'éditer des fichiers et des dossiers sur le serveur distant avec VS Code comme s'ils se trouvaient sur votre PC local.
C'est très simple, mais j'utiliserai l'exemple de programme ci-dessous. Tout d'abord, sur le serveur distant, enregistrez les fichiers suivants dans le même répertoire où vous avez enregistré le notebook.
sample.py
import numpy as np
def sample(x):
y = np.square(x)
return y
Ensuite, démarrez JupyterLab sur le serveur distant et accédez à JupyterLab à partir du navigateur sur le PC local. (C'est la même chose que d'accéder normalement à Jupyter Lab.)
jupyter lab --ip=0.0.0.0
Vous pouvez trouver le message suivant dans le journal lorsque jupyterLab est démarré, vous pouvez donc ouvrir JupyterLab en accédant à l'URL depuis votre PC local. * Au moment de l'accès, l'adresse IP sera remplacée par celle du PC distant.
To access the notebook, open this file in a browser:
file:///home/jupyter/.local/share/jupyter/runtime/nbserver-13-open.html
Or copy and paste one of these URLs:
http://(da9742c1f7ef or 127.0.0.1):8888/?token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Vous pouvez accéder à JupyterLab en accédant à la sortie URL lorsque 5.2.1 JupyterLab démarre à partir d'un navigateur sur votre PC local.
Lorsque vous accédez à JupyterLab, vous devriez voir un noyau appelé "Python3 debug" dans la colonne Notebook comme indiqué ci-dessous. (Il s'agit d'un noyau utilisant ptvsd défini à l'étape 4.2.2.) Cliquez sur ce bouton pour créer un nouveau bloc-notes.
Le coin supérieur droit de l'écran est "Python3 Debug", et vous pouvez voir que le noyau pour le débogage créé précédemment est utilisé.
Pour le moment, créez un notebook comme celui ci-dessous et exécutez-le.
Suivez les étapes de 4.3 pour vous connecter au serveur distant avec VS Code. Une fois connecté, ouvrez l'exemple de programme. C'est comme ça.
Suivez les étapes ci-dessous pour configurer le débogage.
Les paramètres sont les suivants.
--port: spécifiez le port défini dans les paramètres du noyau de ptvsd. --host: spécifiez l'adresse IP du serveur distant. --pathMappings: localRoot doit être $ {workspaceFolder} comme indiqué dans l'exemple ci-dessous. remoteRoot spécifie le dossier sur le serveur distant où les fichiers sont stockés.
{
//Vous pouvez utiliser IntelliSense pour apprendre les attributs disponibles.
//Survolez et affichez la description des attributs existants.
//Vérifiez les éléments suivants pour plus d'informations: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python:attacher",
"type": "python",
"request": "attach",
"port": 19204,
"host": "192.168.2.200",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/home/jupyter/proj/docker"
}
]
}
]
}
Ceci termine les paramètres de débogage. Ensuite, nous allons déboguer.
La procédure de débogage est la suivante. Voir également la vidéo de démonstration au début pour plus de détails.
Après avoir défini un point d'arrêt sur VS Code, le cas échéant, exécutez le jeu "Python attach" défini précédemment.
Exécutez le notebook depuis JupyterLab
Le traitement est interrompu au point d'arrêt, donc déboguez-le.
Le résultat de la commande exécutée dans "Debug Console" sur VS Code est également affiché sur Jupyter Lab. Surtout, c'est très pratique car vous pouvez afficher des variables internes avec matplotlib etc. et les afficher sous forme de graphique!
Résumé Jusqu'à présent, nous avons expliqué comment déboguer un processus Python exécuté à partir de JupyterLab en l'attachant à distance à partir de VS Code. C'est très pratique, alors essayez-le. C'est un peu griffonné, donc il peut y avoir des lacunes. Si vous avez des questions, veuillez commenter et j'aimerais ajouter ou corriger le cas échéant.
Recommended Posts