Что делать если нужно поставить какую-то 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
❤️Как сказать "Я люблю тебя", не говоря этого?
How can I say "I love you" without saying it?
• Кроме любви твоей, мне нету моря. (B. Маяковский)
Apart from your love, there's nothing else for me.
• У меня на сердце без тебя метель. (С. Есенин)
A blizzard rages in my heart without you.
• Целую Вас до дна души. (М. Цветаева)
I kiss you to the very depths of your soul.
• Если бы ты музыкой была, я тебя бы слушал неотрывно. (А. Ахматова)
If you were music, I would listen incessantly.
• Будь из всех исключением. Не исчезай. (А. Вознесенский)
Be the exception to all the rules. Don't disappear.
• Нежнее нежного лицо твоё. (О. Мандельштам)
Your face is more tender than tenderness itself.
• Утебя не должно быть дождей никогда. Пусть они идут у меня. (Р. Рождественский)
You should never have any rain. Let it all fall on me.
❓Do you love Russian poetry?
Check some posts with #poetry#RussianPoetry hashtags!
😎 Stay with @learnRCRussian
🌍 NIKOLAI GUMILYOV IN ABYSSINIA
The Russian Poet-Conquistador in Ethiopia, 1913
«I am a conquistador in iron armor,
I joyfully pursue a star,
I walk through chasms and abysses
And rest in a joyful garden»
1913. Russian poet Nikolai Gumilyov, 27 years old, arrives in Abyssinia — ancient Ethiopia. This is his third African expedition. But Ethiopia is different. This is the birthplace of humanity, the birthplace of coffee, the only African nation never colonized.
🏨TAITU HOTEL: WHERE HISTORY MET POETRY
In Addis Ababa, Gumilyov stayed at the legendary Taitu Hotel, named after Empress Taytu Betul. Here, on carved balconies under high ceilings, he wrote his African poems.
Picture this: evening, the scent of frankincense and coffee, pen scratching paper. Outside — the lights of the capital. The poet writes:
"Deafened by roar and thunder,
Clothed in flame and smoke,
About you, my Africa, in whispers
The seraphim speak in heaven"
⛰️THE SIMIEN MOUNTAINS
From Addis Ababa, Gumilyov ascends to the Simien Mountains. Here the sky is closer than anywhere else. Here eagles fly beneath your feet. Here a person understands how small he is — and how immense the world's beauty.
የስሜን ተራሮች — በዓለም ላይ ከየትኛውም ቦታ የሚያስደንቁ። እዚህ ሰማይ ቅርብ ነው፣ ንስሮች በእግርህ በታች ይበርራሉ። (The Simien Mountains — more breathtaking than anywhere in the world. Here the sky is close, eagles fly beneath your feet.)
☕THE BIRTHPLACE OF COFFEE
The Ethiopian coffee ceremony isn't just a drink. It's a ritual thousands of years old. A woman in white roasts beans over fire, grinds them by hand, brews in a clay jebena. Frankincense smoke. Silence. Rapture.
Гумилёв пьёт этот кофе и понимает: отсюда пришёл аромат, покоривший мир. (Gumilyov drinks this coffee and understands: from here came the aroma that conquered the world.)
🏛️FREE LAND
Ethiopia was never colonized. When all of Africa was divided by European empires, Ethiopia remained free. Gumilyov sees imperial palaces, thrones of precious wood, gold and crimson velvet — and feels ancient regality that Europe has lost.
ኢትዮጵያ በጭራሽ ቅኝ አልሆነችም። ነፃ ምድር። የጥንታዊ ንጉሠ-ነገሥቶች ምድር። (Ethiopia was never colonized. Free land. Land of ancient emperors.)
📿LALIBELA: CHRISTIANITY IN STONE
The rock-hewn churches of Lalibela. Ethiopian Christianity is older than European. Here they guard sacred mysteries. Here monks have prayed in caves for a thousand years.
Гумилёв стоит в древнем храме, и его сердце бьётся от восторга. (Gumilyov stands in an ancient temple, and his heart beats with rapture.)
🎭THE GIRAFFE: AFRICA IN VERSE
Gumilyov's most famous African poem:
"Listen: far, far away, on Lake Chad
An exquisite giraffe wanders.
He's given graceful elegance and bliss,
And his hide is adorned with a magical pattern..."
የአፍሪካ ህልም በግጥም። (The African dream in poetry.)
💔RETURN AND MEMORY
In a few months, Gumilyov will return to Russia. Ahead — World War I, revolution, execution in 1921. He'll be 35 years old.
Но Эфиопия останется с ним до последнего вздоха. Африка вошла в его кровь, в его поэзию, в его душу. (But Ethiopia will remain with him until his last breath. Africa entered his blood, his poetry, his soul.)
🏨THE TAITU HOTEL STILL STANDS
And remembers the Russian poet who sat on the balcony, looked at the stars of Abyssinia, and wrote about beauty that saves the world.
የታይቱ ሆቴል አሁንም ቆሟል። የሩሲያ ገጣሚውን ያስታውሳል። (The Taitu Hotel still stands. It remembers the Russian poet.)
🌟 «Я конквистадор в панцире железном...»
"I am a conquistador in iron armor..."
Eternal memory to the poet. Eternal love for Ethiopia.
ለገጣሚው የዘላለም ትዝታ። ለኢትዮጵያ የዘላለም ፍቅር።
---
🎵Listen while reading:
Mulatu Astatke — "Yèkèrmo Sèw" (Father of Ethio-jazz)
Search: "Mulatu Astatke Yekermo Sew" on any music platform
📸 Photos: Historical Taitu Hotel, Addis Ababa; Simien Mountains; Ethiopian coffee ceremony
#Gumilyov#Ethiopia#Abyssinia#Poetry#TaituHotel#Travel#AddisAbaba#EthioJazz#SilverAge#RussianPoetry#AfricanLove