Как получить Python, который можно носить с собой на флешке
Для чего нужна переносимая версия Python на Linux?
Переносимый Python (portable) позволяет использовать интерпретатор без установки в системные каталоги. Это удобно, когда нет прав root, требуется изолированное окружение для проекта, или нужно запускать код на разных компьютерах. В отличие от обычной установки portable версия не затрагивает системные библиотеки и может храниться на флешке.
Как установить Python в произвольную папку из официального архива?
Самый простой способ получить portable Python на Linux – скачать с python.org tarball с уже скомпилированными бинарниками. Архив содержит интерпретатор, стандартную библиотеку и pip. Для распаковки не требуются root-права.
Шаги:
- Загрузка нужной версии (например, 3.11.5):
wget https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tar.xzPython install failed (ошибка установки python)
- Распаковка:
tar -xf Python-3.11.5.tar.xzPython скачать для windows (скачать python для windows)
- Переход в папку:
cd Python-3.11.5Python dll load (загрузка python dll)
- Запуск Python:
./python/bin/python3.11Ubuntu python install (установка python на ubuntu)
- Для удобства следует добавить папку bin в PATH:
export PATH=$PWD/python/bin:$PATHHttps python downloads windows (скачать python для windows (python.org))
или создать alias:alias python311='$PWD/python/bin/python3.11'установить python cmd (установка python через cmd)
Цель: быстрый старт, минимальные зависимости, перенос папки на USB-накопитель.
Как использовать Python как единый исполняемый файл с AppImage?
AppImage – формат, упаковывающий приложение с зависимостями в один файл. Существуют готовые AppImage для Python (проект python-appimage).
Скачать файл:
wget https://github.com/niess/python-appimage/releases/download/3.11/python3.11.5-cp311-cp311-manylinux2014_x86_64.AppImagePython 3.13 linux (python 3.13 на linux)
Сделать исполняемым:
chmod +x python3.11.5*.AppImagePython portable linux (переносимая версия python для linux)
Запуск:
./python3.11.5*.AppImageAppImage монтирует образ и работает из временной папки. Это полностью изолировано. Ограничение: версия glibc должна быть не ниже той, что указана в AppImage (обычно manylinux2014).
Как перенести Python с окружением через Docker?
Docker не даёт единого файла, но позволяет создать образ с Python и зависимостями, который можно сохранить и загрузить на другую машину.
Создание Dockerfile:
FROM python:3.11-slim\nWORKDIR /app\nCOPY . .\nRUN pip install -r requirements.txtСборка образа:
docker build -t mypyth .Сохранение в архив:
docker save mypyth | gzip > mypyth.tar.gzНа другой машине загрузка:
gunzip -c mypyth.tar.gz | docker loadЗапуск:
docker run -it --rm -v $(pwd):/app mypyth python script.pyЦель: перенос всего окружения, включая пакеты, на любую машину с Docker.
Как собрать Python из исходников для переносимой установки?
Если нужна версия, собранная с определёнными параметрами, можно скомпилировать из исходного кода.
Скачать исходники:
wget https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tar.xz\ntar -xf Python-3.11.5.tar.xz\ncd Python-3.11.5Настройка сборки с префиксом в локальную папку:
./configure --prefix=$HOME/python311 --enable-optimizationsСборка:
make -j$(nproc)Установка:
make installТеперь Python находится в $HOME/python311. Эту папку можно скопировать на флешку.
Цель: полный контроль над опциями компиляции, минимальный размер.
Как pyenv помогает в создании portable версий?
pyenv устанавливает версии Python в ~/.pyenv/versions/. Каждую версию можно скопировать отдельно.
# Установка версии командой pyenv install 3.11.5\n# Копирование папки на флешку\ncp -r ~/.pyenv/versions/3.11.5 /mnt/usb/python311Затем на другой системе запуск через полный путь:
/mnt/usb/python311/bin/python3.11Цель: управление несколькими версиями, удобство при разработке.
Типичные проблемы и способы их решения
1. Ошибка "cannot find libpython3.11.so.1.0":
Причина: бинарник ищет разделяемую библиотеку, но её нет в стандартных путях. Решение: добавить путь к библиотеке в LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=/path/to/python/lib:$LD_LIBRARY_PATHИли использовать статическую сборку.
2. Ошибка "No such file or directory" при запуске Python из tarball:
Причина: несовместимость glibc (бинарник собран под новую версию). Решение: скачать версию, собранную для более старой glibc (например, manylinux2014). Или собрать Python на целевой системе.
3. Проблемы с правами доступа при копировании на флешку с файловой системой FAT32:
Решение: использовать файловую систему ext4 или exFAT, сохранить атрибуты через tar-архив.
4. Отсутствие pip в portable версии:
Решение: установить pip с помощью get-pip.py:
wget https://bootstrap.pypa.io/get-pip.py\n./python/bin/python3 get-pip.pyРасширенные примеры использования portable Python
Пример с официальным tarball и установкой пакета
mkdir ~/portable_python
cd ~/portable_python
wget https://www.python.org/ftp/python/3.11.5/Python-3.11.5.tar.xz
tar -xf Python-3.11.5.tar.xz
cd Python-3.11.5
./python/bin/python3.11 -m ensurepip --upgrade
./python/bin/python3.11 -m pip install requests
./python/bin/python3.11 -c "import requests; print(requests.__version__)"Collecting requests ... Successfully installed requests-2.31.0 2.31.0
Пример с AppImage и виртуальным окружением
wget -O python33.AppImage https://github.com/niess/python-appimage/releases/download/3.3/python3.3.7-cp33-cp33m-manylinux1_x86_64.AppImage
chmod +x python33.AppImage
./python33.AppImage -m venv myenv
source myenv/bin/activate
python --versionPython 3.3.7
Пример с Docker экспортом и импортом образа
# На первой машине
docker pull python:3.11-slim
docker create --name tmp python:3.11-slim
docker export tmp | gzip > python311.tar.gz
# На второй машине
gunzip -c python311.tar.gz | docker import - python311:portable
docker run -it --rm python311:portable python -c "print('Hello from portable python')"Hello from portable python
Пример компиляции с фиксацией rpath
wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tar.xz
tar -xf Python-3.10.12.tar.xz
cd Python-3.10.12
./configure --prefix=$HOME/portable_python310 --enable-shared LDFLAGS="-Wl,-rpath,$HOME/portable_python310/lib"
make -j$(nproc)
make install
$HOME/portable_python310/bin/python3.10 -c "import sys; print(sys.path)"['', '/home/user/portable_python310/lib/python310.zip', '/home/user/portable_python310/lib/python3.10', ...]
Пример переноса версии из pyenv на флешку
# Установка версии через pyenv (если установлен)
pyenv install 3.11.5
# Копирование на флешку (предположим, смонтирована в /mnt/usb)
cp -r ~/.pyenv/versions/3.11.5 /mnt/usb/python311
# На новой системе запуск
export PATH=/mnt/usb/python311/bin:$PATH
python3.11 -c "import platform; print(platform.platform())"Linux-5.15.0-91-generic-x86_64-with-glibc2.35