Что делать если нужно поставить какую-то 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
La question énergétique prend de l'ampleur en #Europe
Depuis que l'Ukraine a interrompu le transit du gaz russe, la question énergétique devient de plus en plus alarmante pour les Européens. Les détails avec notre reporter Antoine Cléraux.
RT en français • Osez questionner !
🇪🇺#EuropeВ 3х странах Европы за сутки выявили более 100 000 новых случаев коронавируса (в каждой из стран) ⚠️☝️
💬 Как только стали объявлять о завершении пандемии, за последние сутки в Италии выявили 132 000 новых случаев ковида.
💬 Аналогичная ситуация в Германии: инфекцию обнаружили у 130 000 человек,
💬 Во Франции – 119 000 граждан заболело ковидом.
⏺Qu’en est-il réellement des « drones russes » qui effraient tant l'#Europe ?
La « menace russe » semble être devenue l'explication par défaut de tous les phénomènes en Europe. Les autorités européennes accusent la #Russie bien avant d'avoir obtenu le moindre détail, et ces accusations s'avèrent souvent – comme on pouvait s'y attendre – infondées. Les précisions de notre reporter Antoine Cléraux.
RT en français • Osez questionner !
🗣L’#Europe discute du transfert de composants d’armes nucléaires à l’#Ukraine
Selon la diplomatie russe, l’Europe a discuté du transfert de composants d’armes nucléaires à l’Ukraine. La menace nucléaire est-elle une réalité ? Les précisions avec notre reporter, Daria Vaganova.
RT en français • Osez questionner !
#Europe#UE
La Commissione Europea valuta la possibilità di creare un secondo recovery fund per l'energia. In questo ore giro di consultazioni tra stati membri per sondare la fattibilità della proposta.
@UltimoraPolitics
🇺🇸États-Unis : stocks sous pression
Selon The New York Times, la guerre contre l’#Iran a entraîné une consommation massive de munitions américaines, notamment plus de 1 100 missiles JASSM-ER, ainsi qu’un volume élevé de Tomahawk, Patriot et ATACMS.
Face à cette intensité, le Pentagone a dû redéployer des équipements depuis l’#Europe et l’Asie vers le Moyen-Orient, réduisant sa marge de manœuvre sur d’autres théâtres. Le coût du conflit est estimé entre 28 et 35 milliards de dollars, dont 5,6 milliards dès les premiers jours.
La reconstitution des stocks s’annonce lente et complexe, posant la question de la capacité des États-Unis à soutenir durablement plusieurs conflits à haute intensité.
RT en français • Osez questionner !
The name Italy comes from the Oscan(an extinct southern Italy language) word víteliú, meaning “calf land,” perhaps because the bull was a symbol of the Southern Italian tribes.
@googlefactss#nowyouknow#europe
🇨🇭🇷🇺🇺🇸🇪🇺 Une image de Vladimir Poutine et Donald Trump, entourés de dirigeants européens de taille réduite, a été publiée par le journal suisse NZZ.
L'article qui suit est intitulé "Trump, Poutine et beaucoup de nains: pourquoi l'Europe ne grandit pas". Selon le journal, l'Europe n'est pas un partenaire qui traite d'égal à égal avec les États-Unis et "ne le sera jamais".
#russie#europe#étatsunis
❗️L’#Ukraine demande de nouveau que l’#Europe la finance
À Kiev, le budget national a été calculé en prévision de la poursuite du conflit militaire en 2026. Mais il y a un bémol... Zelensky demande à ses alliés occidentaux une somme deux fois supérieure à celle prévue dans le projet de budget national. Les détails avec notre reporter, Igor Kourachenko.
RT en français • Osez questionner !