Как перенести библиотеки python на другой компьютер

Обновлено: 06.07.2024

Admin 17.09.2020 , обновлено: 08.01.2021 Python, Ubuntu

Переносим приложение python с локального компьютера на свой удаленный сервер.

Этот материал из цикла статей по разработке сайтов на python: от локальной разработки до развертывания на удаленном сервере.

Перед этим должен быть создан локальный проект на python.

И только после этого можно приступать к переносу зависимостей и проекта на python на удаленный сервер.

У себя на компьютере

У себя на компьютере создаем файл, в котором находятся все зависимости необходимые для проекта:

или выводим локальные зависимости и сохраняем их потом в том же файле:

Если какие-то модули были установлены в обход стандартной процедуры (pip install модуль), то такие модули в этом файле сейчас следует закомментировать и установить на сервере отдельно.

На сервере

Если директория для сайта еще не сделана, то заходим в папку пользователя:

Здесь создаем новую директорию для проекта, например, по названию сайта:

Дальше закидываем локальные данные в гит и подтягиваем их у себя на сервере: инструкция по быстрой миграции через гит. Или переносим любым другим способом.

Затем в этой директории создаем виртуальное окружение:

Обязательно обновляем pip:

Иначе есть вероятность получить при установке других модулей ошибки вроде:

Устанавливаем необходимые зависимости:

Выше в статье было упоминание, что некоторые модули может потребоваться установить дополнительно вручную. Сделайте это для этих модулей теми командами, которыми вы их раньше устанавливали.

Дополнительная настройка на сервере

PostgreSQL

Настройка PostgreSQL. Если пользователь для БД уже был создан раннее, то создаем только новую БД::

Заходим в postgres:

Назначаем привелегии новой таблице:

GRANT ALL PRIVILEGES ON DATABASE ploshadka TO ploshadka;

Обновляем БД

В SQLAlchemy нам потребуется только одна команда обновления БД. Т.к. все коммиты мы отправляем только на локалке, а затем это закидываем в git.

Обновляем в конфиге бд в параметре SQLALCHEMY_DATABASE_URI, добавляем пароль:

SQLALCHEMY_DATABASE_URI = 'postgresql://ploshadka:пароль@localhost/ploshadka'

Конфиги

Значение pbkdf2_sha512 для SECURITY_PASSWORD_HASH не трогать!

Кстати, на сайте нет рекламы. У сайта нет цели самоокупаться, но если вам пригодилась информация можете задонатить мне на чашечку кофе в макдаке. Лайкнуть страницу или просто поблагодарить. Карма вам зачтется.

Я работаю над проектом Python как на моем рабочем, так и на домашнем компьютере. GitHub сделал процесс довольно простым.

Но у меня проблема с файлом pyvenv.cfg в моей папке venv . Поскольку мой Python SDK имеет другой путь к файлу на моем рабочем компьютере по сравнению с моим домашним компьютером, мне приходится вручную заходить в pyvenv.cfg , чтобы изменить путь к файлу home = C:\Users\myName\. каждый раз, когда я извлекаю обновленную версию моего проекта из мой другой компьютер, иначе переводчик не работает.

Кто-нибудь знает решение этой проблемы?

2 ответа

Как подтверждено в комментариях, вы добавили папку виртуальной среды в свой проект и включили ее в файлы, которые вы размещаете на GitHub.

Как правило, это плохая идея, поскольку она частично сводит на нет цель создания виртуальной среды. Ваша виртуальная среда будет содержать пакеты, специфичные для платформы и конфигурации машины, на которой она находится - вы могли бы разрабатывать Linux на одной машине и Windows на другой, и у вас были бы большие проблемы, чем просто одна строка в файле конфигурации.

Что ты должен делать:

  • создать виртуальную среду в папке за пределами вашего проекта / исходной папки.
  • предполагая, что вы используете pip , вы можете запустить pip freeze > requirements.txt , чтобы создать папку requirements.txt , которую затем можно использовать в другой системе с pip install -r requirements.txt для воссоздания той же виртуальной среды .

Все, что вам нужно сделать, это поддерживать этот requirements.txt в актуальном состоянии и обновлять виртуальные среды на любом компьютере всякий раз, когда он изменяется, вместо того, чтобы загружать его через GitHub.

Более подробно простой пример (для Windows, очень похож на Linux):

Поскольку вы говорите, что используете PyCharm, это все еще намного проще, просто убедитесь, что среда, созданная PyCharm, находится за пределами вашей папки проекта. Мне нравится хранить все мои виртуальные среды в одной папке с именами venv, соответствующими именам проектов.

Вы по-прежнему можете создать requirements.txt в своем проекте, и когда вы перетаскиваете проект на другой компьютер с PyCharm, просто сделайте то же самое: создайте venv вне папки проекта. PyCharm распознает, что в файле требований отсутствуют пакеты, и предложит установить их за вас.

Вы не должны хранить полный virtualenv в системе управления версиями, поскольку чаще всего он намного больше, чем ваш код, и там могут быть биты и бобы, специфичные для платформы и интерпретатора.

Итак, мой вопрос заключается в том, что в условиях, когда определенная программа работает хорошо, как я могу клонировать ее в другую, где она также должна работать хорошо? Конечно, без клонирования всей системы;)

Прежде всего, это вопрос Python / Anaconda, и его, вероятно, следует задавать на другом сайте обмена стеками.

Что касается самого вопроса - вы можете экспортировать свою среду Anaconda, используя:

И воссоздайте его, используя:

Обратите внимание, что, как предлагали другие, вы должны использовать виртуальные среды, которые позволяют вам создавать определенную среду, отличную от среды вашей машины, и упростить управление ею.

Для создания виртуальной среды в Anaconda вы можете использовать:

который вы активируете, используя:

Документация Anaconda не очень понятна для использования в среде conda create или conda env create при совместном использовании / воссоздании среды. Не могли бы вы подробнее рассказать, почему вы рекомендуете использовать conda env create в этой ситуации? Я видел этот поток, но именно я пытаюсь точно понять, в какой ситуации каждый вариант ( conda create против conda env create ) должен быть предпочтительным, и каковы недостатки каждой (например: "[ conda env create для] среды, в которой пакеты, использующие pip, были установлены в , что вызывает дополнительную сложность ": какую дополнительную сложность это добавляет?). Я хочу спросить, что при запуске conda env create -f environment.yml это приведет к ошибке, потому что имя virtenv в файле yml уже используется. Измените имя на ваш новый virtenv, чтобы преодолеть. Этот путь спасает вашу жизнь! если вы создаете среду из файла на основе инструкций на странице Anaconda Managing Environments, она не будет работать, если вы используете другую платформу. conda list --explicit > FILE_NAME экспортирует двоичные файлы для текущей платформы и, очевидно, не работает на другой.

Это потребует некоторых временных затрат, но в итоге принесет много преимуществ.

По ссылке, где я выделил вашу конкретную потребность жирным курсивом :

Пакет программного обеспечения в стандартизированные единицы для разработки, отгрузки и развертывания

Образ контейнера - это легкий, автономный исполняемый пакет программного обеспечения, который включает в себя все необходимое для его запуска: код, среду выполнения, системные инструменты, системные библиотеки, настройки. Контейнерное программное обеспечение, доступное как для Linux, так и для Windows, всегда будет работать одинаково, независимо от среды . Контейнеры изолируют программное обеспечение от его окружения, например, различия между средой разработки и промежуточными средами, и помогают уменьшить конфликты между командами, работающими на разных программах в одной и той же инфраструктуре.

Первая конфигурация среды экспорта вашей текущей среды conda с использованием:

После выполнения вышеуказанной команды их должен быть файл конфигурации yml в вашем текущем каталоге, который содержит информацию о вашей среде conda

Для создания новой среды с использованием файла конфигурации yml выполните:

В случае, если вышеперечисленное не работает (из-за различных проблем самой conda), всегда стоит попробовать следующие варианты:

Если ваша программа в основном Python, вы можете полагаться исключительно на виртуальные среды.

Создавайте виртуальные среды для изоляции ваших зависимостей, а не используйте системные библиотеки. Затем используйте инструменты виртуальной среды для дублирования ваших сред.

В рабочем virtualenv создайте файл с версией каждой установленной библиотеки Python:

В новом virtualenv попросите pip установить эти библиотеки с той же версией:

Это гарантирует, что вы получите одинаковые версии lib на обеих машинах. А так как require.txt отслеживается вашей VCS, вы всегда можете воссоздать среду старой версии вашего кода.

Конечно, если вам нужна база данных, рабочий веб-сервер и т. Д., У вас есть еще несколько шагов, и вы не можете полагаться на virtualenv для обеспечения соответствия обеих сред. Здесь вступает Докер (см . Ответ Pieter21 ).

Я установил одну библиотеку python (camelot) на свой mac. Теперь попробовал запустить тот же код на машине linux, где у меня нет корневого доступа.

Он нуждается в некоторых базовых библиотеках .so для установки и т. д. На машине, но у меня нет доступа для их установки..

Есть ли способ перенести всю библиотеку в виде пакета на другую машину и запустить ее без установки?

1 ответ

У нас есть мультисайтовая среда clearcase. Внутри сайта у нас есть несколько потоков. Можно ли перенести действие из одного потока в другой [с одной и той же репликой]?

может ли кто-нибудь помочь мне в реализации того, как перенести объекты с одного JVM на другой, если мое приложение (работающее на двух машинах ) потерпит крах, а другое может завладеть им.

Именно тогда docker пригодится, потому что вы можете инкапсулировать целые среды и базовые библиотеки. Среды Python/Conda (pipenv/conda-env) - это еще один способ управления зависимостями, но они не так легко переносимы.

Похожие вопросы:

Как можно перенести данные с одного Гугл хранения Cloud проекта в другой? Я понимаю, как загружать и как загружать, но я хочу передавать непосредственно между проектами.

Я часто начинаю какую-то работу на своем рабочем столе PC, а затем заканчиваю ее на ноутбуке. Когда мне нужно переключиться, я обычно фиксирую и толкаю сломанный беспорядок в свою восходящую ветвь и.

Я разрабатываю приложение iphone, используя xcode 4.2 теперь я установил mac на другом компьютере , на этом компьютере я установил xcode 4.3.3. теперь мне нужно переместить или скопировать.

У нас есть мультисайтовая среда clearcase. Внутри сайта у нас есть несколько потоков. Можно ли перенести действие из одного потока в другой [с одной и той же репликой]?

может ли кто-нибудь помочь мне в реализации того, как перенести объекты с одного JVM на другой, если мое приложение (работающее на двух машинах ) потерпит крах, а другое может завладеть им.

Если я хочу переместить реестр управления (включая данные, введенные для служб, associations/dependencies/comments/ratings/etc) с одного сервера на другой, как я могу это сделать? Я вижу, что.

Я использую eclipse, чтобы написать свой код в Java. Я регулярно переключаюсь с домашнего компьютера на рабочий. Я хотел иметь возможность автоматически синхронизировать работу, выполняемую на одном.

Я перемещаю одну базу данных с одного компьютера на другой. Я скопировал папку с Xampp > Mysql >Data > 'Database named folder' и поместил ее в то же место на новом компьютере. Теперь я.

Привет, я сделал PG-дамп данных с одного сервера на другой. теперь у меня есть индексы jetty solr, которые нужно перенести на другой сервер, чтобы избежать переиндексации всех данных, а другой.

Читайте также: