Skip to main content

Python на сервере

Проверка установки

# Версия Python 3
python3 --version
# Python 3.8+ (Ubuntu 20.04+)

# Путь к интерпретатору
which python3
which python # может быть 2.x

# PIP (менеджер пакетов)
pip3 --version
pip --version

# Альтернативные менеджеры
pipx --version
poetry --version

Пакетные менеджеры

pip (стандартный)

# Обновление pip
pip3 install --upgrade pip

# Установка пакетов
pip3 install package-name
pip3 install package-name==1.2.3 # конкретная версия

# Установка из requirements.txt
pip3 install -r requirements.txt

# Поиск пакетов
pip3 search package-name

# Удаление
pip3 uninstall package-name

# Заморозка зависимостей
pip3 freeze > requirements.txt

pipenv (менеджер зависимостей + виртуальные окружения)

# Установка
pip3 install pipenv

# Создание проекта
pipenv --python 3.8
pipenv install requests
pipenv install --dev pytest # dev-зависимости

# Активация окружения
pipenv shell

# Запуск в окружении
pipenv run python script.py

# Установка из Pipfile
pipenv install

poetry (современная альтернатива)

# Установка
pip3 install poetry

# Инициализация проекта
poetry new myproject
poetry init # существующий проект

# Добавление зависимостей
poetry add requests
poetry add --dev pytest

# Активация окружения
poetry shell

# Запуск
poetry run python script.py

# Экспорт в requirements.txt
poetry export -f requirements.txt --output requirements.txt

pipx (для глобальных CLI утилит)

# Установка
pip3 install pipx

# Установка CLI приложений
pipx install black
pipx install poetry
pipx install httpie

Виртуальные окружения

venv (встроенный модуль)

# Создание окружения
python3 -m venv venv

# Активация (Linux/macOS)
source venv/bin/activate

# Активация (Windows)
venv\Scripts\activate

# Деактивация
deactivate

# Удаление
rm -rf venv

Структура с виртуальным окружением

project/
├── venv/ # Виртуальное окружение
├── requirements.txt # Зависимости
├── src/
│ ├── __init__.py
│ ├── main.py
│ └── utils/
├── tests/
└── README.md

Фреймворки

Django (полнофункциональный)

# Установка
pip3 install django

# Создание проекта
django-admin startproject myproject
cd myproject

# Создание приложения
python manage.py startapp myapp

# Запуск сервера
python manage.py runserver 0.0.0.0:8000
# Доступно на: http://192.168.0.103:8000

# Миграции БД
python manage.py makemigrations
python manage.py migrate

# Создание суперпользователя
python manage.py createsuperuser

Flask (минималистичный)

# requirements.txt
Flask==2.3.0

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
return 'Hello from Flask!'

if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
# Запуск
python app.py
# Доступно на: http://192.168.0.103:5000

FastAPI (современный, асинхронный)

# requirements.txt
fastapi==0.100.0
uvicorn[standard]==0.23.0

# main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
# Запуск
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# Документация: http://192.168.0.103:8000/docs
# Альтернативная: http://192.168.0.103:8000/redoc

Quart (асинхронный Flask)

# Асинхронный вариант Flask
pip3 install quart

Инструменты разработки

Управление процессами (Gunicorn)

# Установка
pip3 install gunicorn

# Запуск Django
gunicorn myproject.wsgi:application --bind 0.0.0.0:8000 --workers 4

# Запуск Flask
gunicorn app:app --bind 0.0.0.0:5000

# С systemd сервисом
sudo nano /etc/systemd/system/myapp.service

Systemd сервис для Python приложения

[Unit]
Description=My Python App
After=network.target

[Service]
User=kollokpoi
Group=kollokpoi
WorkingDirectory=/home/kollokpoi/myapp
Environment="PATH=/home/kollokpoi/myapp/venv/bin"
ExecStart=/home/kollokpoi/myapp/venv/bin/gunicorn app:app --bind 0.0.0.0:8000
Restart=always

[Install]
WantedBy=multi-user.target

Менеджер процессов (Supervisor)

# Установка
sudo apt install supervisor

# Конфиг
sudo nano /etc/supervisor/conf.d/myapp.conf

[program:myapp]
command=/home/kollokpoi/myapp/venv/bin/gunicorn app:app --bind 0.0.0.0:8000
directory=/home/kollokpoi/myapp
user=kollokpoi
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
# Управление
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myapp
sudo supervisorctl status

Типичные проекты

Веб-приложение (Django)

django-admin startproject config
cd config
python manage.py startapp api
python manage.py startapp frontend

# Структура
config/
├── config/
├── api/
├── frontend/
├── manage.py
└── requirements.txt

REST API (FastAPI)

mkdir fastapi-app && cd fastapi-app
python -m venv venv
source venv/bin/activate
pip install fastapi uvicorn sqlalchemy

# Структура
app/
├── api/
│ ├── endpoints/
│ └── dependencies/
├── core/
├── db/
├── models/
├── schemas/
└── main.py

CLI утилита

# setup.py или pyproject.toml
# Использовать click или argparse
pip install click

import click

@click.command()
@click.option('--name', default='World', help='Name to greet')
def hello(name):
click.echo(f'Hello {name}!')

if __name__ == '__main__':
hello()

Конфигурация для сервера

Запуск на 192.168.0.103

# В любом фреймворке
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
# или
uvicorn.run(app, host="0.0.0.0", port=8000)

Nginx прокси для Python приложения

# /etc/nginx/sites-available/python-app
server {
listen 80;
server_name api.local;

location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

# Статические файлы Django
location /static/ {
alias /home/kollokpoi/myapp/static/;
}

location /media/ {
alias /home/kollokpoi/myapp/media/;
}
}

Управление версиями Python

pyenv (менеджер версий Python)

# Установка
curl https://pyenv.run | bash

# Добавить в shell конфиг
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# Использование
pyenv install 3.11.0
pyenv global 3.11.0
pyenv versions

Обновление Python на сервере

# Ubuntu/Debian
sudo apt update
sudo apt install python3.11 python3.11-venv python3.11-dev

# Установка альтернативной версии
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2
sudo update-alternatives --config python3

Туториалы и документация

Официальные

Практические

Видеокурсы

Полезные пакеты для сервера

# Веб-разработка
pip install django flask fastapi uvicorn gunicorn

# Базы данных
pip install psycopg2-binary mysqlclient sqlalchemy django-orm

# Асинхронность
pip install aiohttp asyncio celery redis

# CLI и утилиты
pip install click rich typer httpie

# Data Science
pip install numpy pandas matplotlib jupyter

# Тестирование
pip install pytest pytest-django coverage

# Безопасность
pip install cryptography bcrypt python-jose[cryptography]

Решение проблем

"ModuleNotFoundError: No module named..."

# Активировать виртуальное окружение
source venv/bin/activate

# Или установить глобально
pip3 install missing-module

# Проверить PYTHONPATH
echo $PYTHONPATH
export PYTHONPATH="/path/to/your/project:$PYTHONPATH"

"pip: command not found"

# Установка pip для Python 3
sudo apt update
sudo apt install python3-pip

Ошибки с зависимостями

# Очистить кэш pip
pip cache purge

# Переустановить в чистом окружении
python3 -m venv new_venv
source new_venv/bin/activate
pip install -r requirements.txt

Недостаточно прав

# Использовать виртуальное окружение вместо глобальной установки
python3 -m venv venv
source venv/bin/activate
pip install package-name

# Или использовать --user флаг
pip3 install --user package-name

Используй Python для: веб-приложений, скриптов автоматизации, анализа данных и ML на сервере 192.168.0.103.