%

Python : environnement virtuel sous OpenBSD

Article publié, le et modifié le
2 minutes de lecture

Cet article contient 337 mots.
Source brute de l'article :
Commit version : e21600e

Description

  • OS : OpenBSD 6.x

Depuis OpenBSD 6.0, l’option de montage wxallowed est configuré par défaut sur /usr/local. Pour ceux qui ne le savent pas, c’est une protection système. Si la partition a cette option, les logiciels sont autorisés à fonctionner depuis cette partition, sinon ils ne pourront fonctionner et émettront un message de violation W^X, tel que :

$ dmesg | grep wxallowed
/home/hs/.local/share/virtualenvs/mybeautifullproject-q1koN8ay/bin/python3(26392): W^X binary outside wxallowed mountpoint

De fait, puisque seul /usr/local a cette option activée, si vous tentez d’exécuter un programme depuis, par exemple, votre $HOME, cela ne fonctionnera pas. Et, c’est tout le problème avec les environnements Python qui doivent fonctionner dans votre répertoire personnel.

Dans les faits, voici ce qui se passe pour virtualenv :

Code : shell

C’est pareil pour pipenv :

Code : shell

D’autant que ce n’est vraiment pas un problème de droits utilisateurs :

Code : shell

Configuration

Une petite modification système va faciliter notre vie - puisque /usr/local est la seule partition autorisée à l’exécution des programmes qui nécessitent la violation W^X :

  • Création d’un répertoire utilisateur dedans :
    # mkdir -p /usr/local/${my_user}/python
  • Attribution des droits utilisateur et groupe correcte :
    # chown -R ${my_user}:wheel /usr/local/${my_user}
  • Création d’un lien symbolique :
    # ln -s /usr/local/${my_user}/python $home/python

Remplacez ${my_user} par votre identifiant de session ;)

Si vous avez la bonne idée d’utiliser l’outil pipenv, il faudra créer un nouveau répertoire et le lier symboliquement ; lisez la section TL;DR ci-dessous…

TL;DR

Remplacez ‘’${my_user}’’ par votre identifiant de session !

=> Pour virtualenv :
# mkdir -p /usr/local/${my_user}/python
# chown -R ${my_user}:wheel /usr/local/${my_user}
# ln -s /usr/local/${my_user}/python $home/python

=> Pour pipenv, il faut rajouter à ce qui suit au-dessus :
$ mkdir /usr/local/$USER/python/virtualenvs
$ ln -s /usr/local/$USER/python/virtualenvs $HOME/.local/share/virtualenvs

Documentations

Remerciements

  • Ce tutoriel n’existerait pas sans Xavier
  • et, sans cet article anglais, nommé “Using cabal on OpenBSD