Что делать если нужно поставить какую-то 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
⚡️TON MemeRepublic: Lambo Week 2 Winner Announced
#TON#LAMBO
TON MemeRepublic reveals the winner of Lambo Week 2 as the LAMBO token, highlighting $100K in liquidity provisioning and $50K in purchases. Utilized through Swap Coffee, this involves DCA engine and liquidity deployment on STON.fi. The process will continue weekly with new tokens.
Source: link
@tonlines
⚡️swap.coffee: $LAMBO Trading Competition Announcement
#LAMBO#swap
swap.coffee presents an exciting $LAMBO trading competition with a prize pool of $2,500. Participants can trade on swap.coffee or @swapi between November 19 and 21. Top traders and random participants have chances to win various prizes in $LAMBO and Lunar Snake Onyx Black gifts.
Source: link
@tonlines
Last Call for Swap.Coffee Trading Competition!
#LAMBO#trading
Swap.coffee is hosting a $LAMBO trading competition with $2,500 in rewards. Less than 2 hours remain to join and trade for a chance to win through various prize categories, including random daily selections and top trading volume rewards.
Source: link
@tonlines
swap.coffee: LAMBO Trading Competition Concludes
#LAMBO#memerepublic
The LAMBO trading competition hosted by swap.coffee has concluded, with all rewards now available in the Claim Center. Congratulations to the LAMBO team for securing 1st place in memerepublic.
Source: link
@tonlines
⚡️TON MemeRepublic: Highlights from Week 2
#BeInCrypto#LAMBO
BeInCrypto has published a comprehensive overview of TON MemeRepublic's second week, highlighting LAMBO's victory with significant community support. The dynamic leaderboard features POK, DICKSHOTI, OC & AMORE, while favorites like UTYA, DOGS, and REDO remain competitive amid new contenders.
Source: link
@tonlines
swap.coffee: Last Chance to Win $LAMBO Prizes
#LAMBO#swap_coffee
Participants have until November 23 to hold their $LAMBO for a chance to win premium prizes on swap.coffee. The trading competition ends tomorrow, providing an opportunity to increase trading volume and earn rewards.
Source: link
@tonlines
⚡️TON MemeRepublic: LAMBO Triumphs in Week 2
#LAMBO#DEX#memecoins
TON MemeRepublic announces LAMBO as the winner of Week 2, awarding $100K after outstanding performance. Updates include a minimum 1% LP trading fee requirement and disqualification for unfounded accusations. Winners are supported with partnerships and guidance to scale their projects.
Source: link
@tonlines
📍 List of abbreviations commonly used in cryptocurrency trading:
#ALTCOIN = Alternate cryptocurrency except bitcoin
#SHITCOIN = A coin with no potential value or use
#BEAR | #BEARISH = Negative price movement
#BULL | #BULLISH = Positive price movement
#LONG = Margin buy position
#SHORT = Margin sell position
#BTFD = Buy The Fucking Dip
#DILDO = Long green or red candles 😆
#DYOR = Do Your Own Research
#FA = Fundamental Analysis
#TA = Technical Analysis
#FOMO = Fear Of Missing Out
#JOMO = Joy Of Missing Out
#FUD = Fear Uncertainty & Doubt
#HODL = Hold a position
#MCAP = Market Capitalization
#MOON = Continuous upward movement of price
#OTC = Over The Counter
#PUMP = Upward price movement
#DUMP = To sell off a coin
#REKT = When you have a bad loss
#WHALE = Very wealthy trader/Market mover
#AMA = Ask me anything
#ATH = All Time High
#ATL = All Time Low
#DLT = Distributed ledger technology
#IMO = In My Opinion
#LAMBO = Lambo is symbol that becomes an elusive goal for most investors
#NOOB = A person who is inexperienced
#SAFU = Secure Asset Funds for Users
#SHILL = Holder of altcoin who just wants to promote it for his own benefit
✅@ElfCryptoVIP