Что делать если нужно поставить какую-то 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
【#本站公告#General #Spring Festival Activities】
🧧The 2023 mushroom cloud Chinese New Year event has started!🧧
==================================
🐰The Year of the Rabbit uses mushroom cloud to let you "🐰Rabbit Fly Forward 🐰Rabbit to Run" all the way 💰
==================================
🌟This limited-edition special product, annual payment special discount 366CNY, let you go smoothly 💰💰💰
Limited to 10, sold out will not make up~
Preferential Specifications:
Time: 365 days
Level: big mushroom
Traffic: 888G (can be reset every 45 days)
Broadband: Peak 888Mbps
==================================
🌟All station product discount code:
Monthly payment: 15% off 2023-CNY-MON
Quarterly payment: 2023-CNY-SEA 25% off
Annual payment: 2023-CNY-YEA 35% discountG
================================
‼️ Notes for this Spring Festival event
1. All discounts are limited to new purchases (old packages cannot be used)
2. None of the refunds are supported
3. In case of exploiting loopholes or violating TOS (including behaviors suspected of loopholes), we have the right to refuse to provide you with services, or even ban your account. This site reserves the highest right of interpretation.
Event schedule: 2022/01/17 22:00-2023/02/01 00:00
==================================
Latest official website: https://1mgy.com
Contact customer support: https://t.me/mushroom_cloud_bot
--------------------------------------------------------------------
🧧2023 mushroom cloud 春節活動開跑囉!🧧
================================
🐰兔年使用 mushroom cloud 讓您 “🐰兔飛猛進 🐰兔來運轉” 一路發發發💰
================================
🌟本檔限量特惠产品,年缴 特惠366CNY,让您一顺顺利利💰💰💰
限量10,售完不補~
特惠規格:
时间:365day
等级: 大蘑菇
流量: 888G (每45天可人工重置一次)
宽带: 峰值888Mbps
================================
🌟全站產品優惠碼:
月繳: 2023-CNY-MON 8.5折
季繳: 2023-CNY-SEA 7.5折
年繳: 2023-CNY-YEA 6.5折
================================
‼️本檔春节活动注意事项
1. 所有優惠限新購(舊套餐無法使用)
2. 均不支持退款
3. 如有出現鑽漏洞或者違反TOS嘅行為(包含疑似漏洞嘅行為),我哋有權拒絕為您提供服務,甚至封禁賬號,本站保留最高解釋權。
活動檔期: 2022/01/17 22:00-2023/02/01 00:00
================================
最新官網: https://1mgy.com
聯繫客服: https://t.me/mushroom_cloud_bot
POCO M7 Plus, POCO M8s, REDMI 15 - China - OS3.0.302.0.WOUCNXM (Android 16)
📆2026/05/06 #release📱#spring
📥Recovery ROM
📝Changelog:
[System]
Updated the security patch to August 2025. Increased system security.
🔗@xiaomiui | @miui_download | @hyperosfirmware | MemeOS Updates | XimiTime