Перенос проекта Django + React на новый компьютер в автономной среде без переустановки зависимостей

У меня есть полностековый проект Django и React, который мне нужно перенести на новый компьютер в полностью автономной среде. Моя текущая настройка включает:

  • Django backend с пользовательским приложением
  • React frontend
  • Виртуальная среда
  • Специфические требования к зависимостям

Структура проекта:

development/
├── .git/
├── .gitignore
├── backend/
│   ├── app/
│   ├── db/
│   ├── manage.py
│   └── myproject/
├── frontend/
│   ├── node_modules/
│   ├── package.json
│   ├── package-lock.json
│   ├── public/
│   └── src/
├── initial_data.py
├── packages/
├── README.md
├── requirements.txt
└── venv/

Задачи

Управление зависимостями

  • Отсутствие доступа в интернет для установки pip или npm
  • Потенциальная несовместимость бинарных файлов с конкретной системой
  • Сохранение точных версий пакетов

Окружающая среда Размножение

  • Настройка виртуальной среды
  • Совместимость версий Python и Node.js
  • Зависимости нативных библиотек

Текущие попытки

Я пробовал:

  • Прямое копирование всего каталога проекта

  • Ручная установка требований из файла requirements.txt

  • Использование pip и npm для установки пакетов

Неизменно эти методы терпят неудачу по следующим причинам:

  • Отсутствуют системные библиотеки

  • Конфликты версий

  • Двоичная несовместимость

Специальные вопросы

  • Как упаковать все зависимости проекта для передачи в автономном режиме?
  • Какой самый надежный метод воспроизведения среды разработки?
  • Существуют ли инструменты, позволяющие создать полный снимок проекта, который можно перенести?

Подробные сведения об окружающей среде

  • Бэкенд: Django 5.0.6

  • Фронтенд: React (на основе package.json)

  • Python: 3.12.4

  • Операционная система: Windows 11

Предложенные решения Попытка

  • PyInstaller для создания автономного исполняемого файла
  • Ручной перенос виртуальной среды
  • Исчерпывающие требования и файлы пакетов

Требования к идеальному решению

  • Настройка нулевой конфигурации на новом компьютере

  • Сохранение точных версий зависимостей

  • Поддержка автономной среды

  • Минимальное ручное вмешательство

Бонусные очки: Скрипт или метод, который может:

  • Проверка совместимости среды

  • Автоматическая установка зависимостей

  • Обработка специфических для системы вариаций

Код/конфигурационные фрагменты

requirements.txt:

altgraph==0.17.4
asgiref==3.8.1
Django==5.0.6
django-cors-headers==4.4.0
djangorestframework==3.15.2
djangorestframework-simplejwt==5.3.1
MouseInfo==0.1.3
packaging==24.1
pefile==2023.2.7
pillow==10.4.0
PyAutoGUI==0.9.54
PyGetWindow==0.0.9
pyinstaller==6.10.0
pyinstaller-hooks-contrib==2024.8
PyJWT==2.8.0
PyMsgBox==1.0.9
pyperclip==1.9.0
PyRect==0.2.0
PyScreeze==1.0.1
pytweening==1.2.0
pywin32-ctypes==0.2.3
setuptools==72.2.0
sqlparse==0.5.0
tk==0.1.0
tzdata==2024.1
wheel==0.45.1

package.json:

{
  "name": "frontend",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@emotion/react": "^11.11.4",
    "@emotion/styled": "^11.11.5",
    "@mui/icons-material": "^5.15.21",
    "@mui/material": "^5.15.21",
    "@testing-library/jest-dom": "^5.17.0",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "axios": "^1.7.2",
    "framer-motion": "^11.14.4",
    "react": "^18.3.1",
    "react-dom": "^18.3.1",
    "react-intersection-observer": "^9.14.0",
    "react-router-dom": "^6.24.0",
    "react-scripts": "5.0.1",
    "react-transition-group": "^4.4.5",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "proxy": "http://localhost:8000",
  "devDependencies": {
    "@babel/plugin-proposal-private-property-in-object": "^7.21.11"
  }
}

Ограничения

  • Отсутствие доступа в Интернет на новом компьютере
  • Возможные различия в версиях ОС (сомнительно)
  • Необходимо поддерживать рабочий процесс разработки

Заранее спасибо! 😊

Вернуться на верх