Автономная установка зависимых модулей Python без PIP - PullRequest
2 голосов
/ 07 мая 2019

Редактировать: Это не дубликат автономной установки пакета Python , так как для ответа требуется «pip».Моя предпосылка - когда pip недоступен.

Мой скрипт на python зависит от этой библиотеки Github .Мне нужно создать самодостаточный архив, включающий эту зависимость, и я могу извлечь и запустить его на своем производственном сервере, у которого нет доступа к Интернету или пункту .Однако у меня есть Python 2.6.6 / Python 2.7

Я создал virtualenv на моей локальной машине (у которой есть Интернет) и установил вышеупомянутую зависимость с помощью pip.pip загрузил зависимые библиотеки.Я получил файл require.txt с

pip freeze > requirements.txt

Теперь я скачал эти требования, используя

pip download -r requirements.txt

Загруженное содержимое

decorator-4.4.0-py2.py3-none-any.whl
jsonpath-rw-1.4.0.tar.gz  
jsonpath_rw_ext-1.2.0-py2.py3-none-any.whl  
pbr-5.2.0-py2.py3-none-any.whl 
ply-3.11-py2.py3-none-any.whl 
six-1.12.0-py2.py3-none-any.whl

Я также создал файл setup.pyпри install_requires, имеющем все содержимое файла require.txt (из этой автономной установки пакета Python )

import setuptools

setuptools.setup(
    name="Resizing Automation Validation Script",
    packages=setuptools.find_packages(),
    install_requires=['ply','pbr','six','decorator','jsonpath-rw','jsonpath-rw-ext'],
    classifiers=[
        "Programming Language :: Python :: 2.6.6",
        "Operating System :: OS Independent",
    ],
)

я попытался выполнить следующую команду для установки этих сценариев (pip недоступно)

python setup.py develop --always-unzip --allow-hosts=None --find-links=/path/to/download/dir

Примечание. Приведенная выше команда работает на только что созданном virtualenv в локальной сети.

Но на сервере (без Интернета) происходит сбой с ошибкой

running develop
running egg_info
creating Resizing_Automation_Validation_Script.egg-info
writing requirements to Resizing_Automation_Validation_Script.egg-info/requires.txt
writing Resizing_Automation_Validation_Script.egg-info/PKG-INFO
writing top-level names to Resizing_Automation_Validation_Script.egg-info/top_level.txt
writing dependency_links to Resizing_Automation_Validation_Script.egg-info/dependency_links.txt
writing manifest file 'Resizing_Automation_Validation_Script.egg-info/SOURCES.txt'
reading manifest file 'Resizing_Automation_Validation_Script.egg-info/SOURCES.txt'
writing manifest file 'Resizing_Automation_Validation_Script.egg-info/SOURCES.txt'
running build_ext
Creating /deployeruser/.local/lib/python2.7/site-packages/Resizing-Automation-Validation-Script.egg-link (link to .)
Adding Resizing-Automation-Validation-Script 1.0.0 to easy-install.pth file

Installed /deployeruser/tmp
Processing dependencies for Resizing-Automation-Validation-Script==1.0.0
Searching for jsonpath-rw-ext

Link to https://pypi.python.org/simple/jsonpath-rw-ext/ ***BLOCKED*** by --allow-hosts

Couldn't find index page for 'jsonpath-rw-ext' (maybe misspelled?)
Scanning index of all packages (this may take a while)

Link to https://pypi.python.org/simple/ ***BLOCKED*** by --allow-hosts

No local packages or download links found for jsonpath-rw-ext

с пипом работает нормально

pip install --no-index --find-links /path/to/download/dir/ -r requirements.txt

Впрочем, как мне заставить его работать без пипа

1 Ответ

0 голосов
/ 08 мая 2019

Установка без pip требует установки непосредственно из архива tarball.Итак,

  1. Сначала получите все архивы тарбола для зависимостей
  2. Перенесите тарболы на зависимый компьютер
  3. Извлеките все тарболлы во временную папку
  4. установить с помощью 'python setup.py install --user'
  5. Запустить программу:)

Подробности:

  1. Создатьфайл require.txt, используя pip freeze > requirements.txt
  2. Получение tar-архивов из среды Python

    • cd в папку загрузки
    • Выполнить pip download -r ../requirements.txt --no-binary :all:,При этом все требования в виде архива tar.gz загружаются в текущий каталог

      Не забудьте загрузить все внутренние зависимости, которые отсутствуют на целевой машине.Мне нужно было также загрузить setuptools-0.6c9 для Python 2.6.6

  3. Перенести папку загрузки на рабочий компьютер (без интернета и pip)

  4. cd, чтобы загрузить папку и выполнить следующую команду, чтобы установить зависимость от текущего активного питона.

    install_tarball_python.sh [tar.gz-file]

#!/bin/bash

# Script: install_tarball_python
# takes the tar.gz dependency as arg
# creates a temp directory and extracts the archive in it.
# 'cd's into the extracted archive and runs 'python setup.py install'
# 'cd's back to the current directory and removes the temp containing the decompressed archive

if [ $# -lt 1 ]; then
    echo "Usage: install_tarball_python <package.tar.gz>"
    exit 1
fi
pushd . && mkdir temp && tar zxf $1 -C temp && cd temp && cd * && python setup.py install --user&& popd && rm -rf temp
Запустите скрипт Python.
...