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.