Что делать если нужно поставить какую-то 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
Результаты 3ей попытки Первенства Локомотив!
4ю попытку необходимо выложить - до 29 мая 23:59 по московскому времени;
Напоминаем вам условия первенства: в зачет идет лучшая попытка.
Условия:
- снять дорожку не более чем на 45 сек
- снять 2 одиночных трюка
- опубликовать видео на своей странице ВК
- отметить дисциплину #park#street (можно участвовать в двух дисциплинах с разными роликами)
- отметить @fedskaterussia
- поставить тег #первенство_локомотив
Скоро мы узнаем финалистов!
Добрый вечер! Мы подготовили результаты 2ой попытки Первенства Локомотив!
3ю попытку необходимо выложить - до 22 мая 23:59 по московскому времени;
Кто забыл условия первенства, то напоминаем вам: в зачет идет лучшая попытка.
Условия:
- снять дорожку не более чем на 45 сек
- снять 2 одиночных трюка
- опубликовать видео на своей странице ВК
- отметить дисциплину #park#street (можно участвовать в двух дисциплинах с разными роликами)
- отметить @id145190006 (@fedskaterussia)
- поставить тег #первенство_локомотив
Результаты 1ой попытки - https://vk.com/wall-150050521_4947
Битва продолжается!
Ну что, друзья, готовы снова зарядить пауэрбэнки и вернуться в скейтпарки за своими лучшими дорожками?
Объявляем онлайн-квалификацию на Первенство ОО «РФСО Локомотив»!
Первенство проходит в дисциплинах «парк» и «улица» среди юношей и девушек до 16 лет включительно (это значит, что на момент самого контеста вам должно быть не более 16 лет).
У вас будет 4 попытки, чтобы показать свой лучший результат!
В каждой попытке от вас требуется:
- снять дорожку не более чем на 45 сек
- снять 2 одиночных трюка
- опубликовать видео на своей странице ВК
- отметить дисциплину #park#street (можно участвовать в двух дисциплинах с разными роликами)
- отметить @fedskaterussia
- поставить тег #первенство_локомотив
Время для съемок и публикации своих видео:
1 попытка - до 8 мая 23:59 по московскому времени;
2 попытка - до 15 мая 23:59 по московскому времени;
3 попытка - до 22 мая 23:59 по московскому времени;
4 попытка - до 29 мая 23:59 по московскому времени.
Отличные новости! 🛴😎
У нас пополнение среди паркеров! Встречайте — Николаенко Данил из солнечного Краснодара!
Данил крутой райдер, чей уникальный стиль и бесстрашие уже успели вдохновить многих.
Мы рады объявить, что теперь Данил будет выступать при поддержке нашей команды и бренда!
Добро пожаловать в команду!
📱dkravets15
#park#TechTeamProхуйня
#НовыйРайдер
A mini picnic in the park. 🧺
Just being here and now is the best plan for the day.
Мини-пикник в парке. 🧺
Просто быть здесь и сейчас — лучший план на день.
#LunaEverly#Picnic#DayMindset#Park#Simplicity
A multidisciplinary team of XISUI Design has created a 3D concrete-printed playground in Shandong Province, China.
Named Boulder Park, a 13,000-square-metre community park in Ji’nan, combines massive boulders - a natural material symbolizing eternity - as the core design element. These boulders complement the park’s experiential and practical offerings.
Stones in the shallow creek can be incorporated into the water play installation, and boulders set over a sandpit can be used as climbing and resting play structures. Additionally, cutting-edge 3D-printed concrete technology is used to build a huge rock cave adventure area.
Images 1-2-3-4-5 📸 Zhou Sheng.
Image 6 📸 Hu Yihao.
#design#playgrounddesign#park#urban#3dprinting#3dprintingconcrete#china
📷 La foto è stata scattata nel Parco centrale intitolato a Maksim Gorkij a Lugansk.
Strutture in legno gialle usate come librerie pubbliche.
" Un viaggio nel lato nascosto del Donbass: quello che costruisce invece di distruggere ".
#Donbass#lugask#europa#estate#ferragosto
#Lugansk#europa#russia#italia#Books#lettura#parchi#park