Запуск и запуск проекта, упакованного с помощью «setuptools» в venv со всеми требованиями

Структура проекта примерно такая:

project/
|-- src/
|   |--sub_project1/
|      |--__init__.py
|      |-- main.py
|   |-- __init__.py
|   |-- requirements.txt
|
|-- setup.py
|-- README.md
|-- MANIFEST.in  

Я начал с setuptools, чтобы упаковать свой проект. Я думаю, что мне удалось создать дистрибутив, но я не уверен в более позднем процессе, как тщательно настроить проект в виртуальной среде (venv) для запуска src\sub_project1\main.py.

Шаги, которые я выполнил до сих пор:

  • Создан с requirements.txt по pipreqs.
  • Создан setup.py, который устанавливает include_package_data=True для включения requirements.txt, упомянутого в MANIFEST.in.

setup.py:

from setuptools import setup, find_packages
import pkg_resources

with open("README.md", "r") as fh:
    long_description = fh.read()

# read data from .txt as str, decode and then split to get a list of requirements
requirements = pkg_resources.resource_string('src', 'requirements.txt').decode("utf-8").split()

setup(
    ...
    packages=find_packages(),
    include_package_data=True,
    install_requires=requirements,
    ...
)

MANIFEST.in:

include *.txt
  • Сгенерировал раздачу:

    python setup.py sdist bdist_wheel

Теперь, когда я упаковал проект, я хочу создать виртуальную среду, настроить зависимости и запустить ее.

Я начал с создания виртуальной среды, используя python -m venv <DIR>. И есть одна из двух следующих команд для установки всех требований:

pip install -r requirements.txt

or

pip install ./downloads/SomeProject-1.0.4.tar.gz

который устанавливает все необходимые пакеты. Но с этого момента я не уверен, что смогу выполнить шаги для фактического выполнения моего сценария. Как реально выполнить проект в созданной виртуальной среде?

Кроме того, у меня есть несколько вопросов:

  1. setup.py используется только для установки требований? Чем две приведенные выше команды отличаются с точки зрения вывода?
  2. Помимо установки требований, вам нужно вручную поместить файлы проекта в нужный каталог? Поскольку pip install *.tar.gz не распаковывал файлы проекта!
  3. Как использовать entry_points в setup.py?

person DEEPAK SURANA    schedule 13.06.2018    source источник
comment
Можете ли вы дать более подробную информацию о вашем пакете? Какой скрипт вы хотите сделать исполняемым, какие данные пакета вы хотите включить?   -  person Nils Werner    schedule 14.06.2018
comment
@NilsWerner, я обновил пост со структурой проекта. Я хочу настроить весь проект в venv и хочу, чтобы src\sub_project1\main.py исполнялся. Я включаю src\requirements.txt в пакет, используя include_package_data=True и MANIFEST.in.   -  person DEEPAK SURANA    schedule 19.06.2018


Ответы (2)


Чтобы активировать виртуальную среду, вы должны запустить source /path/to/venv/bin/activate. Затем, когда вы перейдете в каталог, содержащий setup.py, и запустите pip install ., он установит ваш пакет вместе со всеми его зависимостями.

В любой момент вы можете запустить which pip, чтобы увидеть, какой пункт будет использоваться при установке. Если вы хотите установить свой пакет в виртуальную среду, убедитесь, что это /path/to/venv/bin/pip.

pip install -r requirements.txt просто установит пакеты, перечисленные в requirements.txt. pip install /path/to/tar.gz должен работать так же, как pip install /path/to/package.

Точки входа немного более обширны, но здесь хороший ресурс для начала работы с этим.

person MoxieBall    schedule 20.06.2018
comment
Итак, во-первых, мне нужно вручную разместить все файлы проекта в нужном каталоге. Установка из tar.gz не даст мне файлы проекта, верно? - person DEEPAK SURANA; 20.06.2018
comment
Вам нужно отредактировать файлы пакета или просто установить пакет? Если вам нужны файлы, вам нужно разархивировать tar.gz туда, куда вы хотите его отредактировать, pip этого не сделает. Однако, если вы устанавливаете с помощью venv pip и у вас активен venv, вы сможете использовать пакет. - person MoxieBall; 20.06.2018
comment
Да, мне просто нужны файлы пакета для запуска всего проекта. Я использовал pip install ., который установил пакет, и использовал entry_points для запуска основного скрипта. Он делает это, но когда он запускается, он не может найти другие зависимые модули в том же каталоге, что и основной. - person DEEPAK SURANA; 21.06.2018
comment
Хотя я нахожусь в каталоге project и в нем есть все файлы. Кроме того, я также попробовал python setup.py sdist bdist_wheel, который создал каталог сборки со всеми файлами. Я не уверен, как использовать для сборки дистрибутив! - person DEEPAK SURANA; 21.06.2018
comment
Давайте продолжим это в чате - person MoxieBall; 21.06.2018

Вы можете проверить https://setupy.info/ для получения дополнительной информации о setup.py, он должен ответить на вопросы 1 и 2.

Вы также можете использовать что-то вроде pip install -e . внутри своего проекта для локальной установки пакета.

Надеюсь это поможет.

person Laurent    schedule 14.06.2018
comment
ссылка объясняет атрибуты для setup.py, но все еще не отвечает, чем отличаются две упомянутые мной команды и как получить все файлы проекта из дистрибутива .tar - person DEEPAK SURANA; 19.06.2018