Что делать если нужно поставить какую-то 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
If an unprecedented drone attack on civilians in European waters can go unanswered, what message does that send to the world? Malta is not the only government being tested here. This is a moment of truth for the EU, for international law, and for all those who claim to uphold human rights. And so it is up to international community to demand accountability and end support for these crimes.
Sign our petition now. Tag UN experts, rapporteurs, and human rights bodies to demand a transparent investigation. Contact your government and demand they condemn this unprecedented attack. Support safe passage for our missions. Watch and share our content. And never forget to demand an end to Israel's illegal blockade, an end to the genocide, and to ensure self-determination for all Palestinian people.
SIGN NOW - https://bit.ly/alleyesondeck
#BreakTheSiege#FreePalestine#ConscienceShip#EndTheOccupation#HumanRights
Robert has long fought alongside Palestinians and isn't stopping now. Having spent time in Palestine documenting horrific human rights abuses by Israeli forces, he has seen the brutality of the occupation first hand. Despite the extreme difficulty in leaving his children and partner back home in what he describes as a "grieving process", he shares how important it is to use his privilege to be a part of the collective effort to break the siege on Gaza. As we have witnessed over the course of 9 months and 76+ years prior, we cannot fathom or predict the IOF's brutality or what they are capable of if they intercept 'Handala' in international waters. So we need your help in keeping Robert as safe as possible. We need your help in demanding safe passage for all volunteers onboard our Flotillas. Please share our videos, tag your politicians and ensure that we reach Gaza safely. #endtheblockade#breakthesiege#robertmartin#freepalestine#freegaza#endtheoccupation#solidarity#wewillsail#letthemsail
This Eid, our hearts are with the Palestinians of Gaza. You deserve life, justice, peace, and the right to celebrate Eid without mourning. One day soon, Eid will be celebrated in a Gaza that is whole, alive, and at peace. Until then, we will not stop. Eid Mubarak.
#EidMubarak#FreedomForGaza#Madleen#Solidarity#Palestine#EndTheOccupation#JusticeForGaza
UN experts warned months ago that Israel is deliberately starving Palestinians, and that famine is rapidly spreading across Gaza, and yet Israel continues with impunity and is sent billions of dollars by the US. Children, infants, pregnant women, people living with disabilities, the elderly and those with chronic illnesses are the most at risk of severe malnutrition, illness, and death. Mobilize today, and continue boycotting products and companies that support these war crimes. #freegaza#freepalestine#endtheoccupation#humanitarianaid#costofliving#northgaza#gazacity#freedomflotilla#ffc#breakthesiege#endtheblockade
#BDS
* prices are in US dollars
Our objectives—to break the blockade and raise awareness of the genocide against Palestinians in Gaza—remain unchanged. We will provide updates on our next departure when we are ready to sail again.
In the meantime, we urge you to join the #NoHarbourForGenocide campaign to take action against the siege on Gaza by opposing every country and company complicit in this genocide. #handala#ffc#freedomflotillacoalition#freegaza#freepalestine#endtheoccupation#breakthesiege#endtheblockade#iof#warcrimes#icc#icj
Despite relentless police brutality and state repression in Germany, Yasemin, a Kurdish-Turkish activist on the 'Handala' ship, remains unwavering in her fight for Palestinians. Born into resistance, she fearlessly confronts oppression, transforming each attempt to silence her into fuel to continue fighting for justice. Her steadfast belief in direct action and the power of collective resistance is undeterred by the dangers she has faced, which led her to join 'Handala'. Yasemin encourages all of us watching to disrupt capital and profits in order to create effective change. Download the No Thanks app, search every product before buying it, and boycott companies that support Zionism and Israel’s war crimes against Palestinians. We are never just one person. Together, it is possible to speak their language and hit them where it hurts - their wallets. #endtheoccupation#freegaza#freepalestine#endtheblockade#breakthesiege#freedomflotilla#ffc#yaseminacar#handala#berlin#bds#boycott#divest#sanction
This election is not just about what happens within U.S. borders—it’s about the lives of millions around the globe. When you vote, you’re making a statement about where America stands on human rights. History has shown us that you cannot negotiate with leaders who offer nothing but empty promises. Kamala Harris herself said, "Never let anyone tell you who you are. Show them who you are." Well, the Biden-Harris administration has shown us who they are. For ten months, they’ve done nothing but fund the annihilation of Gaza and the West Bank.
We cannot accept these empty words when hundreds of thousands of lives are at risk. It’s time to demand real action, not just lip service. Sign the petition to enact an arms embargo on Israel, spread the truth in your community, and mobilize for the sake of humanity.
Take Action Now:
🖋️ Sign the Petition: Not Another Bomb! Demand an arms embargo to stop the genocide (in our stories)
📰 Stay Informed: Join the Uncommitted Movement and tell Kamala Harris to stand on the right side of history. Sign up for updates.
🗣️ Spread the Word: Distribute flyers, educate your community, and support candidates who truly stand for human rights.
#KillerKamala#BidenHarris#USElections#DNC#ActForGaza#EndTheOccupation#NoMoreEmptyPromises#FreeGaza#FreePalestine#PermanentCeasefire#UNSecurityCouncil#GlobalImpact#FFC#FreedomFlotilla