Как правильно создать проект на Python для операционной системы Linux?

Я разработал проект на Python с использованием PyQt5 и успешно собрал его с помощью PyInstaller в один файл, который отлично работает на Windows 11. Однако сейчас мне нужно перенести программу на операционную систему Linux (Linux Astra), где возникли множество проблем. При запуске через Wine происходит ошибка, связанная с matplotlib; попытки собрать проект в Linux с помощью PyInstaller также не увенчались успехом, а попытки запустить через Proton в Steam не дали ожидаемого результата, и логи содержат искаженную информацию. Я несколько раз проверял все зависимости и их версии, но, похоже, PyInstaller не подходит для Linux либо я неправильно собираю проект. <br/><br/> Поэтому у меня вопрос: как лучше всего собрать мой проект, чтобы обеспечить его работоспособность на Linux? Стоит ли продолжать использовать PyInstaller или есть другие, более подходящие способы?
  • 12 марта 2025 г. 0:04
Ответы на вопрос 2
Создание проекта на Python для Linux может быть несколько сложным, особенно если вы привыкли к Windows. Давайте рассмотрим несколько шагов и стратегий, которые могут помочь вам успешно перенести ваш проект на Linux.

### 1. Установка окружения
Перед тем как начать, убедитесь, что у вас установлены все необходимые зависимости. Для работы с PyQt5, matplotlib и PyInstaller вам понадобятся соответствующие пакеты. В большинстве случаев их можно установить с помощью `pip`:

```bash
sudo apt update
sudo apt install python3-pyqt5 python3-matplotlib python3-pip
pip3 install pyinstaller
```

### 2. Создание виртуального окружения
Рекомендуется создать виртуальное окружение для каждого проекта. Это поможет избежать конфликтов между пакетами. Для этого выполните:

```bash
python3 -m venv myprojectenv
source myprojectenv/bin/activate
```

Установите все зависимости вашего проекта в это окружение.

### 3. Проверка работоспособности проекта
Перед сборкой убедитесь, что ваш проект корректно работает в созданном окружении. Запустите скрипт, чтобы проверить, нет ли ошибок:

```bash
python main.py
```

### 4. Сборка проекта с помощью PyInstaller
Для сборки с помощью PyInstaller выполните следующие команды, находясь в корневой директории вашего проекта:

```bash
pyinstaller --onefile --windowed your_script.py
```

- `--onefile`: собирает в один исполняемый файл.
- `--windowed`: не открывает консольное окно (для GUI приложений).

После завершения сборки, исполняемый файл будет находиться в директории `dist`.

### 5. Проверка исполняемого файла
Запустите собранный исполняемый файл в терминале, чтобы убедиться, что он работает правильно:

```bash
./dist/your_script
```

### 6. Устранение ошибок
Если вы получаете ошибки при запуске, внимательно изучите сообщения. Часто они подсказывают, чего не хватает или какие зависимости отсутствуют. Некоторые советы по устранению ошибок:

- Проверьте, установлены ли все библиотеки, необходимые для выполнения: `sudo apt install python3-matplotlib`
- Убедитесь, что все пути к ресурсам (например, иконки, шрифты и т.д.) указаны корректно.
- Если вы используете сторонние библиотеки, убедитесь, что они корректно работают на Linux.

### 7. Альтернативы PyInstaller
Если у вас продолжаются проблемы с PyInstaller, можно рассмотреть другие инструменты для упаковки приложений, такие как:

- **cx_Freeze**: также позволяет создавать исполняемые файлы для Linux и Windows.
- **py2exe**: только для Windows.
- **Nuitka**: может компилировать ваши скрипты в C и затем собирать их.

### 8. Документация и поддержка
Обратитесь к официальной документации PyInstaller и других инструментов для получения дополнительной информации. Возможно, в сообществе, например на Stack Overflow, есть темы, схожие с вашей проблемой.

### Заключение
Трансляция приложения с Windows на Linux действительно может быть непростой задачей. Следуйте приведённым шагам, и если у вас возникнут конкретные ошибки, не стесняйтесь спрашивать!
Pyinstaller вполне себе нативно работает в том числе и под linux (см. пункт Operating System), так-что не следует извращаться с wine/proton и прочими прослойками и просто собирайте напрямую в астре. 
Другое дело, а нужно ли вообще это? Куда более правильный путь - просто установить зависимости и запускать python-скрипт напрямую (обычно в linux-дестрибутивах python стоит по умолчанию, а если боитесь, что ваш код украдут, то бандл Pyinstaller`а очень легко выпотрошить и достать его).
Похожие вопросы