Что делать если нужно поставить какую-то Python-библиотеку а root-прав нет? То есть в систему библиотеку никак и ничего не поставить.
Есть как минимум два способа это решить правильно!
🔸 Сделать виртуальное окружение и ставить там что угодно.
Это позволит создать полностью независимое исполняемое окружение для ваших приложений.
Все библиотеки будут храниться в домашней директории юзера а значит доступ на запись имеется.
Создать очень просто:
python3 -m venv ~/venvs/myenvname
Теперь активируем окружение
# Linux
source ~/venvs/myenvname/bin/activate
# Windows
%userprofile%\venvs\myenvname\Scripts\activate.bat
Можно ставить любые библиотеки и запускать приложение.
Это стандартный метод работы с любым проектом. Если еще не используете его, то пора начинать. Даже при наличии root доступа!
🔸 Бывает, что нет возможности запустить приложение из своего виртуального окружения. Например, его запускает какой-то сервис от вашего юзера и вставить активацию окружения вы не можете.
В этом случае можно установить библиотеки для Python не глобально в систему, а только для юзера.
Выполните этот код в консоли:
python3 -m site
Вы получите что-то такое:
sys.path = [
'/home/user',
'/usr/lib/python37.zip',
'/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/home/user/.local/lib/python3.7/site-packages',
...
]
USER_BASE: '/home/user/.local'
USER_SITE: '/home/user/.local/lib/python3.7/site-packages'
ENABLE_USER_SITE: True
Нас интересует параметр USER_SITE. Это путь к пользовательским библиотекам, которые доступны по умолчанию, если они есть.
Именно сюда будут устанавливаться модули если добавить флаг --user при установке чего-либо через pip
pip install --user requests
Для этой команды не нужны root-права.
После неё можно запускать системный интерпретатор без виртуальных окружений и установленная библиотека будет доступна для текущего юзера.
Параметр USER_BASE показывает корневую директорию для хранения user-библиотек. Её можно изменить с помощью переменной окружения PYTHONUSERBASE
export PYTHONUSERBASE=~/pylibs
python3 -m site
...
USER_BASE: '/home/user/pylibs'
USER_SITE: '/home/user/pylibs/lib/python3.7/site-packages'
Получается некоторое подобие виртуального окружения для бедных 😁 которое можно менять через эту переменную (не делайте так!Лучше venv!)
🔸 Дописывание пути в PYTHONPATH
Этот способ не входит в список "двух правильных", но тоже рабочий. Здесь придётся сделать всё несколько сложней.
Сначала ставим библиотеку в любое место указывая путь установки
pip3 install -t ~/mylibs modulename
Библиотека установится без привязки к какому-либо интерпретатору. То есть по умолчанию не будет видна. Теперь в нужный момент добавляем этот путь в sys.path или в PYTHONPATH.
Не буду советовать так делать. Единственный раз когда этот способ мне пригодился и решил поставленную задачу, это при создании общей библиотеки для кластера компьютеров.
Модули лежат в сети и подгружаются для всех из одного и того же места. То есть обновлять файлы требуется только один раз а не на всех хосты отдельно.
Минусы такого подхода:
▫️Нужно всем хостам пробить нужный путь в .bashrc или ещё куда-то чтобы он сетапился на старте.
▫️Чем больше хостов тем больше нагрузка на сеть. Иногда такой способ не подходит именно по этой причине. Тогда Ansible вам в помощь.
▫️Не очень подходит если хосты с разными операционками. Некоторые библиотеки различаются для Linux и Windows (там, где есть бинарники) и приходится мудрить более сложные схемы.
#tricks#basic
🇷🇺🇷🇺🎉Les 8 et 9 mai, un cessez-le-feu est proclamé en l'honneur de la célébration de la #Victoire du peuple soviétique lors de la Grande Guerre patriotique, a annoncé le ministère russe de la Défense.
Les Forces armées russes prendront toutes les mesures nécessaires pour assurer la sécurité des événements festifs. À la suite de cette proclamation de cessez-le-feu, la Russie espère que la partie ukrainienne suivra son exemple, a indiqué le ministère.
RT en français • Osez questionner !
🇷🇺La première répétition générale du défilé de la #Victoire du 9 mai s'est déroulée le 21 avril à Saint-Pétersbourg
RT en français • Osez questionner !
🟢Claude Janvier, écrivain polémiste et analyste politique, fait le point sur la trêve à l'occasion du Jour de la #Victoire.
RT en français • Osez questionner !
🎗Le « Régiment des immortels » dans les stades de football russes a débuté le 6 mai à l’occasion du derby de Coupe entre Spartak et CSKA
Les joueurs, entraîneurs et arbitres sont entrés sur le terrain en brandissant des portraits de leurs proches ayant participé à la Grande Guerre patriotique.
En l'honneur du 81e anniversaire de la #Victoire, l'Union russe de football et le mouvement du Régiment des immortels de Russie, avec le soutien de la Première ligue russe et de la Ligue nationale de football, organisent un programme de commémorations intitulé « Un pour tous : Équipe, Patrie, Victoire ! »
Le coup d’envoi symbolique a été donné par Rem Balakirev, 98 ans, qui a participé aux combats pour la prise de Berlin.
RT en français • Osez questionner !
🎗Le musée de la #Victoire organise son traditionnel grand événement patriotique : « la valse de la Victoire ».
Cet événement est consacré à la célébration du Jour de la Victoire et vise à préserver la mémoire de la Grande Guerre patriotique. Des centaines de participants de tous âges ont pris part à la danse.
RT en français • Osez questionner !
🇷🇺🇷🇺 Les 8 et 9 mai, un cessez-le-feu est proclamé en l'honneur de la célébration de la #Victoire du peuple soviétique lors de la Grande Guerre patriotique, a annoncé le ministère russe de la Défense.
Les Forces armées russes prendront toutes les mesures nécessaires pour assurer la sécurité des événements festifs. À la suite de cette proclamation de cessez-le-feu, la Russie espère que la partie ukrainienne suivra son exemple, a indiqué le ministère.
RT en français • Osez questionner !
📆🥇 Piotr Tolstoï, vice-président de la Douma, s’est rendu sur la Place Rouge avec ses enfants pour qu'ils n'oublient jamais la #Victoire.
RT en français • Osez questionner !
⭐#Russie : des militaires rendent hommage aux vétérans avant le Jour de la #Victoire
Dans le territoire d’Altaï, des militaires russes ont rendu hommage aux vétérans à l’approche du Jour de la Victoire. Accompagnés par un orchestre militaire, des soldats ont défilé devant les habitations d’anciens combattants avec des copies des drapeaux historiques de l’Armée rouge.
L’orchestre a ensuite interprété la chanson russe « Jour de la Victoire » ainsi que d’autres compositions emblématiques de l’époque soviétique.
RT en français • Osez questionner !
🎗🗣Vladimir #Poutine présente ses vœux aux dirigeants et aux peuples de pays étrangers à l’occasion du 81e anniversaire de la #Victoire.
Le président russe a adressé des messages aux dirigeants de l’Azerbaïdjan, de l’Arménie, de la Biélorussie, du Kazakhstan, du Kirghizstan, du Tadjikistan, du Turkménistan, de l’Ouzbékistan, de l’Abkhazie et de l’Ossétie du Sud, ainsi qu’aux peuples de la Géorgie et de la Moldavie.
RT en français • Osez questionner !
🎗#Moscou se prépare pour le 9 Mai
Moscou se prépare à célébrer le 9 Mai – une date sacrée pour des millions de personnes à travers le monde. Mais cette année, cette Fête de la #Victoire se déroule sous haute tension. Menaces de Kiev, silence des Européens et attaques de drones : les autorités russes ont mis en garde le pouvoir ukrainien. Pour en savoir plus, les explications de notre reporter Igor Kourachenko, depuis le centre de la capitale russe.
RT en français • Osez questionner !
Le patriarche Cyrille de #Moscou a célébré une liturgie à la cathédrale des forces armées russes, à l’approche du Jour de la #Victoire.
RT en français • Osez questionner !