Варианты установки пакета Python через setup.py

Раздел: Инструменты -> Пакеты

Установка пакета Python с setup.py

Наиболее эффективный способ установки пакета, содержащего файл setup.py, заключается в использовании менеджера пакетов pip в сочетании с командой pip install .. Этот подход автоматически обрабатывает зависимости, выполняет сборку и устанавливает пакет в текущее окружение. Например:

cd my_package_dir
pip install .

Python build package (сборка пакета python)

Команда запускает setup.py через setuptools, гарантируя корректную установку. Рекомендуется выполнять установку внутри виртуального окружения, чтобы изолировать зависимости проекта.

Как установить пакет напрямую через python setup.py install?

Классический способ, который использовался до повсеместного внедрения pip. Выполняется из корня пакета:

python setup.py install

Python download package (скачивание пакета python)

Типичные проблемы:

  • Отсутствие setuptools: перед установкой необходимо установить setuptools (обычно входит в состав Python, но может быть пропущено в минимальных сборках). Решение: pip install setuptools.
  • Ошибки компиляции C-расширений: часто возникают на Windows из-за отсутствия компилятора. Решение: установить Microsoft Visual C++ Build Tools или использовать заранее собранные wheel-файлы.
  • Конфликт версий зависимостей: python setup.py install не проверяет совместимость зависимостей, что может нарушить работу других пакетов. Рекомендуется использовать pip.

Цель использования: совместимость с устаревшими проектами или в средах, где pip недоступен.

Как установить пакет в режиме редактирования (develop)?

Режим разработки позволяет устанавливать пакет так, чтобы изменения в исходном коде немедленно применялись без повторной установки. Варианты:

python setup.py develop
pip install -e .

Python pip install local package (установка локального пакета через pip)

Второй способ предпочтительнее, так как использует pip и корректно обрабатывает зависимости.

Возможные ошибки:

  • Пути установки: pip install -e . создает ссылку на каталог пакета. При перемещении каталога ссылка ломается. Решение: повторная установка.
  • Конфликт с уже установленной версией: Если пакет уже установлен глобально, может возникнуть путаница. Решение: использовать виртуальное окружение.

Цель: активная разработка пакета, когда требуется часто менять код и тестировать.

Как собрать и установить wheel (колесо)?

Сборка binary-распространения в формате .whl ускоряет установку на других машинах. Команды:

pip install wheel                     # установка сборщика
python setup.py bdist_wheel           # создание .whl файла в папке dist/
pip install dist/my_package-*.whl     # установка из wheel

Python install package version (установка пакета определенной версии в python)

Проблемы:

  • Платформозависимость: собранный wheel может не работать на других ОС. Решение: собирать wheel для каждой целевой платформы или использовать manylinux.
  • Отсутствие зависимостей в wheel: зависимости не включаются в wheel, они указываются в setup.py. При установке pip скачает их отдельно.

Цель: распространение предварительно собранного пакета без необходимости компиляции на стороне пользователя.

Как установить пакет из репозитория Git?

Если пакет не опубликован на PyPI, его можно установить прямо из Git:

pip install git+https://github.com/user/repo.git
pip install git+https://github.com/user/repo.git@develop   # установка из ветки

модули python linux (модули python в linux)

Ошибки:

  • Отсутствие Git: на машине должен быть установлен Git. Решение: установить Git или использовать ZIP-архив с pip install https://...zip.
  • Проблемы с аутентификацией: для частных репозиториев требуется токен или SSH-ключ. Решение: настроить доступ.

Цель: установка последней версии пакета из репозитория без ручного клонирования.

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

Перед любой установкой создается виртуальное окружение:

python -m venv venv
source venv/bin/activate   # Linux/Mac
venv\Scripts\activate      # Windows
pip install .              # установка пакета

Типичные ошибки:

  • Не активированое окружение: пакет устанавливается глобально. Решение: проверить, что виртуальное окружение активно (по имени в приглашении командной строки).
  • Права доступа: при установке глобально требуется sudo на Linux. В виртуальном окружении права не нужны.

Цель: изоляция проекта от системных пакетов Python.

- Remove python package (удаление пакета python)
- Python pip install windows (установка пакетов pip в windows)
- Python pip windows (установка pip на windows)

Расширенные примеры установки и сборки

Ниже приведены подробные примеры с кодом и выводом команд. Предполагается, что создан простой пакет со следующей структурой:

Пример
my_package/
    setup.py
    my_package/
        __init__.py
        module.py

Файл setup.py содержит:

Пример
from setuptools import setup, find_packages

setup(
    name='my_package',
    version='0.1.0',
    packages=find_packages(),
    install_requires=[
        'requests>=2.25.0',
        'numpy'
    ],
    extras_require={
        'dev': ['pytest', 'flake8'],
        'doc': ['sphinx']
    },
    entry_points={
        'console_scripts': [
            'my_command=my_package.module:main'
        ]
    }
)

Пример 1: установка с проверкой зависимостей.

Пример
$ cd my_package
$ pip install .
Processing /home/user/my_package
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: my-package
  Building wheel for my-package (setup.py) ... done
  Created wheel for my-package: my_package-0.1.0-py3-none-any.whl
  Stored in directory: /tmp/pip-ephem-wheel-cache-...
Successfully built my_package
Installing collected packages: my-package
Successfully installed my-package-0.1.0
$ python -c "import my_package; print(my_package.__version__)"
0.1.0

Пример 2: установка в режиме редактирования (editable).

Пример
$ pip install -e .
Obtaining file:///home/user/my_package
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Installing collected packages: my-package
  Running setup.py develop for my-package
Successfully installed my-package
$ python -c "import my_package; print(my_package.module.some_value)"
42

После изменения кода в module.py перезапуск программы подхватит изменения без повторного запуска pip install.

Пример 3: сборка wheel и установка из него.

Пример
$ pip install wheel
Collecting wheel
  Using cached wheel-0.42.0-py3-none-any.whl
Installing collected packages: wheel
Successfully installed wheel-0.42.0

$ python setup.py bdist_wheel
running bdist_wheel
running build
...
creating dist
Successfully built my_package-0.1.0-py3-none-any.whl

$ pip install dist/my_package-0.1.0-py3-none-any.whl
Processing ./dist/my_package-0.1.0-py3-none-any.whl
Installing collected packages: my-package
Successfully installed my-package-0.1.0
$ my_command
Hello from my_package

Консольная команда my_command автоматически добавлена благодаря entry_points.

Пример 4: установка с дополнительными зависимостями (extras).

Пример
$ pip install .[dev]
Processing /home/user/my_package
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: my-package
  ...
Successfully built my-package
Installing collected packages: my-package, pytest, flake8
Successfully installed flake8-7.0.0 my-package-0.1.0 pytest-8.0.0

Будут установлены пакеты pytest и flake8 вместе с основным пакетом.

Пример 5: установка из Git с указанием ветки.

Пример
$ pip install git+https://github.com/example/api-wrapper.git@v2.0
Collecting api-wrapper from git+https://github.com/example/api-wrapper.git@v2.0
  Cloning https://github.com/example/api-wrapper.git (to revision v2.0) ...
  Running setup.py install for api-wrapper ... done
Successfully installed api-wrapper-2.0
$ python -c "import api_wrapper; print(api_wrapper.__version__)"
2.0

Пример 6: создание бинарного wheel с платформенной зависимостью (C-расширение).

Пример
# setup.py с C-расширением
from setuptools import setup, Extension

module = Extension('my_c_module', sources=['src/my_c_module.c'])
setup(
    name='my_c_package',
    version='0.1.0',
    ext_modules=[module],
)
Пример
$ pip install .
...
Building wheel for my-c-package (setup.py) ... done
Successfully installed my-c-package-0.1.0
$ python -c "import my_c_module; print(my_c_module.add(1,2))"
3

При ошибке компиляции на Windows будет выведено сообщение об отсутствии компилятора. Решение - установить Microsoft C++ Build Tools и перезапустить команду.

Пример 7: использование data_files для установки конфигурационных файлов.

Пример
# setup.py
from setuptools import setup

setup(
    name='my_app',
    version='0.1.0',
    packages=['my_app'],
    data_files=[
        ('etc', ['config/default.conf'])
    ]
)
Пример
$ pip install .
$ python -c "import os; print(os.path.exists('/path/to/etc/default.conf'))"
True

Путь назначения (etc) может зависеть от ОС. На современных версиях setuptools рекомендуется использовать package_data или include_package_data=True.

Установка пакета Python с setup.py - comments

En
Python setup py install (python)