Что делать если нужно поставить какую-то 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
#Apple
Apple Store 上线国家补贴,仅限北京上海
🔗Apple Store (中国大陆)
Apple Store 官方在中国大陆上线了国家补贴,购买 iPhone、iPad 或指定配置 Apple Watch 最高优惠 RMB 500。商品总价须低于 RMB 6000。购买符合条件的 Mac 机型最高优惠 RMB 2000。升级配置不可享受补贴优惠。仅限 Apple Store 在线商店 (北京收货地址) 和 Apple Store 零售店 (上海地区)。
常见问题
符合资格的消费者购买参与活动的 iPhone、iPad、Apple Watch 时,可享商品到手价基础上再立减 15% 的国家补贴,每件补贴不超过 500 元,仅限到手价不超过 6000 元的单件商品;购买参与活动的 Mac 时,可享商品到手价基础上再立减 20% 的国家补贴,每件补贴不超过 2000 元。如该产品同时参与 Apple 或其合作伙伴提供的其他优惠活动,优惠额度部分不计算国家补贴。实际补贴金额以商品购买页面展示为准。
符合资格的消费者每类产品仅可享补贴 1 件。
参与国家补贴的订单仅可包含 1 件参与活动的商品。若订单包含多个商品,则该订单中的所有商品均无法享受国家补贴。
参与国家补贴的订单不支持与 iPhone 年年焕新计划、Apple Trade In 换购计划或 AppleCare+ 服务计划同时下单购买。
参与国家补贴的订单不支持保价退差。
Apple Store 在线商店:参与国家补贴的 Apple Store 在线商店订单不支持 Apple Store 零售店取货服务、快送服务,不支持定制化服务、镌刻服务。按照政府的相关规定,参与国家补贴的 Apple Store 在线商店订单对签收时间有特殊要求。消费者须在下单之日起 6 天内完成签收,否则订单将被取消,商品由承运商取回。在承运商经尝试送货,消费者无法签收的情况下,订单可能会被取消。商品发货日期超过一定期限的非现货商品可能无法享受国家补贴。请在商品购买页面确认是否具备补贴活动参与资格。参与国家补贴的 Apple Store 在线商店订单不支持部分退款,不支持收货地址更改,不支持换货。参与国家补贴的 Apple Store 在线商店订单需在签收快递时配合承运商完成现场拆封、激活及拍照存档等国家补贴政策所要求的操作。如无法在签收当场完成激活或配合拍照存档等操作,订单将被取消,商品由承运商取回。
Apple Store 零售店:于上海地区 Apple Store 零售店参与活动的消费者,在享受国家补贴时,必须出示身份证件,提供姓名,用以按要求开具个人实名信息的发票。参与国家补贴的 Apple Store 零售店订单不支持部分退款,不支持换货,不支持部分付款方式,不支持定制化服务。参与国家补贴的 Apple Store 零售店订单,购买后需在门店配合工作人员完成现场拆封、激活及拍照存档等国家补贴政策所要求的操作。如不能在购买当场完成激活或配合拍照存档等操作,则无法享受国家补贴。
本次活动仅针对个人消费者。参与国家补贴的订单仅支持开具个人的增值税普通发票 (如需发票抬头,仅可开具消费者本人实名信息),不支持变更抬头,不支持企业抬头。
#Promotions#AppleStore
📮 频道 @AppPie