Créez un environnement python sur CentOS 7.7 pour votre serveur domestique

Ajouté le 06.11.2019.

motivation

J'exécute un serveur domestique avec GitLab et Mattermost installé sur CentOS 7 pour configurer un environnement de programmation à la maison (je prépare un article séparé pour cette configuration. Cela fait longtemps pour diverses raisons ...)

Diverses notifications de GitLab peuvent être vues dans Mattermost, mais à part cela, si un virus est détecté par ClamAV ou si un journal approprié peut être envoyé au canal privé de Mattermost, il sera plus facile à gérer. Gmail est enterré dans beaucoup de spam. Il semble que python dispose d'une bibliothèque appelée slackweb qui peut envoyer des messages à slack etc., donc le but final est de l'installer.

Cependant, comme je n'ai pas joué avec python sur le serveur en premier lieu, je vais créer un environnement afin que je puisse utiliser 3 systèmes au lieu de la version 2.7 par défaut de CentOS 7. Puisqu'il est dit de créer un environnement virtuel approprié pour ne pas polluer l'environnement d'origine, lorsque je l'ai googlé, l'environnement virtuel de pyenv et pipenv semblait bon, je vais donc l'essayer pour le moment.

Supplément à $ et # Pour la console, $ est l'utilisateur local et # est l'utilisateur root (état sudo su).

Préparation préalable

Tout d'abord, comme d'habitude, mettez à jour l'environnement une fois avec sudo yum update. Cette fois, GitLab est passé de 12.4.0 à 12.4.1 et la mise à jour a pris un certain temps.

Installez pyenv

Tout d'abord, installez les packages nécessaires pour pyenv.

# yum install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel tk-devel git

Puis clonez pyenv depuis github. Placé dans / usr / local / pyenv afin qu'il puisse être utilisé par tous les utilisateurs.

# git clone git://github.com/pyenv/pyenv.git /usr/local/pyenv
# cd /usr/local/pyenv
# mkdir {versions,shims}  <- ,Ne mettez pas d'espace après

Téléchargez également le package pour la mise à jour pyenv.

# cd plugins/
# git clone git://github.com/pyenv/pyenv-update

Spécifiez la variable d'environnement pour pyenv et transmettez-la via le chemin.

# echo 'export PYENV_ROOT="/usr/local/pyenv"' >> /etc/profile.d/pyenv.sh
# echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/pyenv.sh

En outre, PATH peut être repris au moment de sudo

# visudo

Ci-dessus, modifiez la ligne avec secure_path comme suit.

#Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults        env_keep += "PATH"
Defaults        env_keep += "PYENV_ROOT"

Vous pouvez maintenant utiliser pyenv car le chemin passera lorsque vous vous reconnecterez ou $ source / etc / profile.d / pyenv.sh.

$pyenv --version
pyenv 1.2.14-11-gb5f69fe
$pyenv install --list
~Les versions de python disponibles sont décalées~

(Il est normal de suivre le chemin, mais je ne comprends pas vraiment pourquoi éditer le contenu de visudo est comme ça. Puis-je commenter sur / sbin ...?)

Installation de pipenv

Puisque pip lui-même n'était pas inclus, installez-le à partir de là.

$curl https://bootstrap.pypa.io/get-pip.py | sudo python
$pip --version
pip 19.3.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)

Ensuite, attendez l'installation de pipenv.

$sudo pip install pipenv
$pipenv --version
pipenv, version 2018.11.26

Créez l'environnement virtuel lui-même dans le dossier # 2019.11.06 Addendum

Dans l'état ci-dessus, pipenv peut être utilisé, et un environnement virtuel pour chaque dossier ou projet peut être créé avec pipenv --python 3.7.5 etc. dans la section suivante. Cependant, la substance de cet environnement virtuel est créée dans ~ / .local / share / virtualenvs /. Lorsque je me suis connecté au serveur, je voulais savoir qui s'est connecté sur Mattermost avec getpass.getuser (), mais comme l'entité est dans le répertoire personnel de chaque utilisateur, je veux obtenir slack web Je n'ai pas pu le lire et j'ai lancé une erreur. Puisque la version de python était 3.7.5 pour les autres utilisateurs, il semble que l'environnement de pyenv ait été chargé, mais l'environnement de pipenv n'a pas pu être chargé. Pour éviter cela, définissez $ PIPENV_VENV_IN_PROJECT comme variable d'environnement. En conséquence, l'environnement virtuel réel est stocké dans le répertoire .venv de chaque répertoire de projet. Je veux que tous les utilisateurs connectés utilisent .venv de chaque projet, alors ajoutez ce qui suit à la fin de / etc / bashrc.

/etc/bashrc


# To enable local virtual enviroment for pipenv
export PIPENV_VENV_IN_PROJECT=1

Désormais, tous les utilisateurs peuvent tout gérer, des programmes aux environnements qu'ils souhaitent utiliser avec le contenu d'un seul répertoire.

Création d'un environnement virtuel Python avec pyenv et pipenv

Créez un dossier de projet pour vérifier le fonctionnement de slackweb, qui est la cible initiale.

$mkdir my_program
$mkdir my_program/slackweb
$cd my_program/slackweb

Spécifiez python 3.7.5 de la dernière carte de la série 3.7 comme environnement. Cependant, il semble que libffi-devel soit nécessaire pour utiliser la série 3.7 ou une version ultérieure, donc installez-la avant d'installer 3.7. (J'ai fait des allers-retours plus tard sans faire ça)

$sudo yum install libffi-devel 
$sudo pyenv install 3.7.5

Maintenant que nous avons 3.7.5 via pyenv, créez un environnement virtuel pour l'utiliser dans le dossier my_program / slackweb.

$pipenv --python 3.7.5

Dans cet état, vérifiez que la version python du système et la version python de pipenv dans ce dossier sont différentes.

$python --version
Python 2.7.5
$pipenv run python --version
Python 3.7.5

Si vous gardez à l'esprit «pipenv run», vous utilisez la commande dans cet environnement. C'est bien avec une petite confirmation, mais si vous voulez entrer dans l'environnement virtuel et exécuter toutes les commandes suivantes avec python dans l'environnement virtuel, si vous voulez exécuter toutes les commandes suivantes avec python dans l'environnement virtuel, entrez dans l'environnement avec pipenv shell. En sortant, ʻexit`. Même si vous le faites depuis pipenv sans faire pyenv au préalable, il semble que cela se fera à partir de l'installation de python en coopération avec pyenv, mais dans ce cas, vous devez le faire avec sudo. Ensuite, l'environnement virtuel créé est susceptible d'être sous la racine (?), Donc cette fois, il est exécuté séparément. Si vous installez pyenv uniquement pour les utilisateurs locaux et que vous ne transmettez le chemin qu'à vous-même, vous n'aurez pas besoin de sudo (?)

Enfin, installez Slack Web.

$pipenv install slackweb

Si vous faites pip list dans un shell normal, vous pouvez voir les choses installées par pip du système, mais dans un environnement virtuel

[name@localhost slackweb]$ pipenv shell
(slackweb) [name@localhost slackweb]$ pip list
Package    Version
---------- -------
pip        19.3.1
setuptools 41.6.0
slackweb   1.0.5
wheel      0.33.6

De cette manière, vous pouvez vérifier le contenu de l'environnement virtuel que vous avez créé. Voici un test pour voir si slackweb fonctionne:

(slackweb) [name@localhost slackweb]$python
Python 3.7.5 (default, Nov  3 2019, 00:13:05)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import slackweb
>>> slack = slackweb.Slack(url="Adresse de crochet Web entrant de votre Mattermost")
>>> slack.notify(text="This is a test from inside of the server.")

Place de la ville de Mattermost indique qu'il s'agit d'un test de l'intérieur du serveur. Avec cela, diverses notifications peuvent être envoyées à Mattermost à l'avenir, ce qui est pratique. Diverses choses sont susceptibles de se produire.

Envoyer une notification de connexion à Mattermost # 2019.11.06 Addendum

Nous avons préparé un programme qui avertit Mattermost lorsque le serveur se connecte réellement.

login_notification.py


import slackweb
import getpass

slack = slackweb.Slack(url="Adresse de crochet Web entrant de votre Mattermost")
attachments = []
attachment = {"title": "Login notification",
              "pretext": "This is a notification from _FQDN du serveur_",
              "text": "**" + getpass.getuser() + "** logged in.",
              "mrkdwn_in": ["text", "pretext"]}
attachments.append(attachment)
slack.notify(channel="#Nom du canal de destination de notification",
             username="CentOS 7",
             attachments=attachments)

Au fait, le module getpass est la bibliothèque par défaut pour python, vous n'avez donc pas à essayer de le mettre avec pipenv (ou plutôt, vous souffrez juste d'erreurs, de perte de temps ...). Si vous l'installez par inadvertance, un enregistrement étrange sera laissé dans le Pipfile, supprimez donc les informations inutiles avec pipenv uninstall getpass, pipenv clean.

Après cela, vous pouvez obtenir une notification de connexion en exécutant ceci. Faites simplement pipenv run python login_notification.py, mais je veux que vous soyez averti automatiquement une seule fois lorsque vous vous connectez. Par conséquent, ajoutez-le à la fin de / etc / bashrc pour que cela se produise également pour tous les utilisateurs.

/etc/bashrc


# Notify the login to mattermost
cd /home/username/my_program/slackweb/    <-nom d'utilisateur est l'utilisateur qui a créé l'environnement et le programme ci-dessus
pipenv run python login_notification.py
cd ~     <-Je ne sais pas quoi faire plus tard, je vais donc retourner à la maison de l'utilisateur connecté

Désormais, chaque fois que vous vous connectez avec ssh ou sudo su, vous serez notifié à Mattermost que vous vous êtes connecté en tant qu'utilisateur ou root. Mattermost peut facilement lier les notifications aux smartphones, donc même si une personne suspecte prend le relais à votre insu, vous pouvez immédiatement le remarquer. C'est une assurance pour la tranquillité d'esprit, il est donc plus important d'empêcher la fuite de la clé privée d'accès, mais je pense qu'il est très important que les gens se sentent à l'aise. (En ce sens, je ne suis pas du tout soulagé car je crains d'exposer par inadvertance le crochet Web ou le nom d'utilisateur lors du téléchargement de cet article)

Site de référence

Installer Pyenv sur CentOS et créer un environnement de développement Python 3

[Python] Construisez un environnement virtuel python avec pyenv et pipenv (CentOS 7 depuis presque l'état initial)

J'ai essayé d'utiliser Pipenv pour le développement Python

Pipenv: Flux de travail de développement Python pour les humains (pipenv officiel)

Message POST de python à Slack via le webhook entrant

Recommended Posts

Créez un environnement python sur CentOS 7.7 pour votre serveur domestique
Créer un environnement python3 sur CentOS7
Créez un environnement python avec ansible sur centos6
Créez un environnement de développement Python sur votre Mac
Créez un environnement Python sur votre Mac en utilisant pyenv
Créer un environnement python dans centos
Construire un environnement python sur MacOS (Catallina)
Créez un environnement python sur votre Mac
Configurons un serveur WEB avec Chromebook
Créer un environnement Python + OpenCV sur Cloud9
Créez un environnement Python sur votre Mac avec Anaconda et PyCharm
Créez simplement un environnement d'exécution Python 3 sous Windows
Créer un environnement Python sur Mac (Mountain Lion)
Créer un environnement Kubernetes pour le développement sur Ubuntu
Construire un environnement Python sur le serveur Sakura VPS
Construire un environnement de développement Python sur Raspberry Pi
Créer un environnement de gestion de version pour Python, Ruby, Perl, Node.js sous UNIX
Créer un environnement LAMP [CentOS 7]
Créer un environnement Python sur Windows
Construire un environnement Python avec Windows
Créer un environnement Python hors ligne
Créer un environnement de développement Python basé sur GVim sur Windows 10 (3) GVim8.0 et Python3.6
# 2 Créez un environnement Python avec une instance EC2 d'AWS (ubuntu18.04)
Créez un environnement de développement local pour Laravel6.X sur votre Mac
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Créer un environnement de développement Python basé sur GVim sur l'installation de Windows 10 (1)
Comment créer un environnement Django (python) sur Docker
Procédure de création d'un environnement CDK sous Windows (Python)
Comment créer un environnement Python sur Amazon Linux 2
Construire un environnement Python sur Mac
Créer un environnement d'étude d'apprentissage automatique Python avec macOS Sierra
Créer un environnement d'apprentissage automatique à l'aide de Python sur MacOSX
Comment créer un nouvel environnement virtuel Python sur Ubuntu
Construire un environnement Python sur Ubuntu
Créer un environnement Python sur Mac (2017/4)
Créer un environnement de développement Python basé sur GVim sur les paramètres de base de Windows 10 (2)
Configurer l'environnement Python sur CentOS
Créer un environnement Python et transférer des données vers le serveur
Construire l'extension Python E-Cell 4 sur Mac OSX (Yosemite)
Créer un environnement Python 3.8 + Pipenv sur Ubuntu 18.04
Créer un environnement virtuel pour python sur mac [Très facile]
Concurrence avec VS Code Créez un environnement Python pour les professionnels sous Windows
Créer et tester un environnement CI pour plusieurs versions de Python
Créez un environnement Python 2.7 64 bits avec TDM-GCC et MinGW-w64 sous Windows 7
Créer un environnement de développement local pour Lambda + Python à l'aide de Serverless Framework
# 3 Créez un environnement Python (Django) avec une instance EC2 (ubuntu18.04) d'AWS part2
Essayez d'utiliser virtualenv qui peut créer un environnement virtuel de Python
Comment créer un environnement Python à l'aide de Virtualenv sur Ubuntu 18.04 LTS
Construire un serveur de cache Pypi sur QNAP
Créer un environnement pour Python intégré à Blender
Environnement de création de module d'extension Python 2.7, 3.4, 3.5 sous Windows
Créer un environnement Python 3 et OpenCV sur Ubuntu 18.04
Créons un environnement virtuel pour Python
Construisez un serveur WebDAV simple sur Linux
Un mémo contenant Python2.7 et Python3 dans CentOS
Créer un serveur CGI fonctionnant sur Python 3 sur Docker
Je veux créer un environnement Python
[Mac] Création d'un environnement virtuel pour Python
Construire un serveur Samba sur Arch Linux
Créer un environnement Python avec Anaconda sur Mac