web-dev-qa-db-fra.com

Exécutez le script Python du cahier Jupyter à l’aide d’un fichier virtualenv spécifique

Je voudrais exécuter un long script Python depuis un cahier Jupyter afin de pouvoir pirater les structures de données générées à mi-parcours.

Le script a de nombreuses dépendances et arguments de ligne de commande et est exécuté avec un virtualenv spécifique. Est-il possible d'exécuter de manière interactive un script Python à l'intérieur d'un cahier à partir d'un virtualenv spécifié (différent de celui de l'installation de Jupyter)?

Merci!

50

Voici ce qui a fonctionné pour moi (non conda python): (MacOS, version brassée de python. Si vous travaillez avec python système, vous devrez (probablement) ajouter chaque commande avec Sudo)

d'abord activer virtualenv

si vous recommencez à nouveau, vous pouvez par exemple utiliser virtualenvwrapper

$pip install virtualenvwrapper
$mkvirtualenv -p python2 py2env 
$workon py2env

# This will activate virtualenv

(py2env)$ 

# Then install jupyter within the active virtualenv
(py2env)$ pip install jupyter

# jupyter comes with ipykernel, but somehow you manage to get an error due to ipykernel, then for reference ipykernel package can be installed using:
(py2env)$ pip install ipykernel

Ensuite, configurez le noyau

(py2env)$ python -m ipykernel install --user --name py2env --display-name "Python2 (py2env)"

puis lancez jupyter notebook (il n'est pas nécessaire d'activer le venv pour cette étape)

(py2env)$ jupyter notebook
# or
#$ jupyter notebook

dans le menu déroulant du cahier jupyter: Kernel >> Change Kernel >> <list of kernels>, vous devriez voir Python2 (py2env) kernel

Cela facilite également l’identification de la version du noyau python) et sa maintenance côte à côte.

voici le lien vers la documentation détaillée http://ipython.readthedocs.io/fr/stable/install/kernel_install.html

53
muon

Une solution un peu plus simple pour obtenir les noyaux d'ordinateurs portables disponibles dans d'autres ordinateurs portables.

J'utilise Linux + virtualenv + virtualenvwrapper. Si vous utilisez une configuration différente, modifiez certaines commandes par celles qui conviennent, mais vous devriez vous faire une idée.

mkvirtualenv jupyter2
workon jupyter2
(jupyter2) pip install jupyter
(jupyter2) ipython kernel install --name "jupyter2_Python_2" --user

la dernière commande crée le répertoire ~/.local/share/jupyter/kernels/jupyter2\ python\ 2/

même chose pour 3

mkvirtualenv -p /usr/bin/python3 jupyter3
// this uses python3 as default python in virtualenv
workon jupyter3
(jupyter3) pip install jupyter
(jupyter3) ipython kernel install --name "jupyter3_Python_3" --user

Une fois terminé, vous devriez voir les deux noyaux, peu importe l’environnement que vous utilisez pour lancer jupyter. Vous pouvez supprimer des liens vers des noyaux directement dans ~/.local/share/jupyter/kernels/. Pour spécifier l'emplacement, fournissez des options à ipython kernel install (--help) ou copiez simplement les répertoires de ~/.local/share/jupyter/kernels/ Vers ~/envs/jupyter3/share/jupyter Si vous souhaitez exécuter plusieurs kerenels à partir d'un seul bloc-notes.

43
singer

J'ai trouvé ce lien très utile:

https://ocefpaf.github.io/python4oceanographers/blog/2014/09/01/ipython_kernel/

Assurez-vous que vous avez installé jupyter dans votre virtualenv. Au cas où le lien disparaîtrait plus tard, voici le Gist:

Vous devez créer un nouveau noyau. Vous spécifiez votre noyau avec un fichier JSON. Vos noyaux sont généralement situés à ~/.ipython/kernels. Créez un répertoire avec le nom de votre virtualenv et créez-y votre fichier kernel.json. Par exemple, un de mes chemins ressemble à ~./ipython/kernels/datamanip/kernel.json

Voici à quoi ressemble mon fichier kernel.json:

{
  "display_name": "Data Manipulation (Python2)",
  "language": "python",
  "codemirror_mode": {
    "version": 3,
    "name":"ipython"
  },
  "argv": [
    "/Users/ed/.virtualenvs/datamanip/bin/python",
    "-c",
    "from IPython.kernel.zmq.kernelapp import main; main()",
    "-f",
    "{connection_file}"
    ]
}

Je ne sais pas exactement ce que fait l'objet codemirror_mode, mais cela ne semble pas nuire.

13
edhodapp

C'est vraiment simple, basé sur le documentation

Vous pouvez utiliser virtualenv pour votre bloc-notes IPython. Suivez les étapes suivantes, vous n’avez en fait pas besoin de la première étape, assurez-vous d’avoir activé votre virtualenv via source ~/path-to-your-virtualenv/

  1. Installez le module de noyau ipython dans votre virtualenv

    workon my-virtualenv-name # active votre virtualenv, si vous n'avez pas encore installé pip iphkernel

  2. ( L'étape la plus importante ) Exécutez maintenant le script "auto-installation" du noyau:

    python -m ipykernel install --user --name = mon-virtualenv-name Remplace le paramètre --name le cas échéant.

  3. Vous devriez maintenant pouvoir voir votre noyau dans le menu du cahier IPython: Kernel -> Change kernel et pouvoir y accéder (vous devrez peut-être actualiser la page avant qu'elle n'apparaisse dans la liste). IPython se souviendra ensuite du noyau à utiliser pour ce cahier.

8
Hamed MP

La solution de @ singer n'a pas fonctionné pour moi. Voici ce qui a fonctionné:

. /path/to/virtualenv/.venv/bin/activate
python -m ipykernel install --user --name .venv --display-name .venv

Référence: Noyaux pour différents environnements (documentation officielle)

5
A T