Вопросы по упаковке первого проекта PyPi - PullRequest
0 голосов
/ 28 марта 2019

Несколько дней назад я создал небольшой проект под названием pyblime , и сейчас я пытался выяснить, как создать правильный файл setup.py, который позволил бы мне загружать «нужные вещи» в PyPi. так что пользователи смогут наслаждаться проектом, используя pip, не делая ничего «слишком сложного», например, вызывая необычные пользовательские сценарии dev, сейчас структура дерева проекта выглядит следующим образом:

│   .gitignore
│   configure.py
│   MANIFEST.in
│   README.md
│   requirements.txt
│   setup.py
│   
├───data
│   ├───commands
│   │       comment.py
│   │       fold.py
│   │       
│   ├───screenshots
│   │       test_simple.png
│   │       test_themes.gif
│   │       
│   ├───st_build_3149
│   │   ├───syntax
│   │   └───themes
│   └───testfiles
├───docs
│       build.md
│       contributing.md
│       guidelines.md
│       usage.md
│       
├───examples
│       demo_00.py
│       tutorials.py
│       tutorial_00.py
│       tutorial_01.py
│       tutorial_02.py
│       tutorial_03.py
│       tutorial_04.py
│       tutorial_05.py
│       tutorial_06.py
│       
├───pyblime
│       utils.py
│       view.py
│       __init__.py
│       
├───sublime_text
│       sublime.py
│       sublime_plugin.py
│       
└───tests
        run_all.py
        test_scopes.py
        test_view.py
        x.py

Вместо 1 вопроса у меня есть несколько простых сомнений:

  • Каким был бы «стандартный» способ указать setup.py копировать файлы sublime_text/sublime.py и sublime_text/sublime_plugin.py в корневой каталог Lib/site-packages?
  • Как вы сказали бы setup.py скопировать всю папку pyblime adhoc в Lib/site-packages?
  • Наконец, правильно ли загружать тесты / примеры / тесты / документы / данные в PyPi? Это контент, который не будет необходим для использования самой SDK / библиотеки ... Если это не так, куда бы вы включили этот тип данных ... Я знаю, что существует концепция папок sdist & dist, и я уже прочитал немного об этом здесь но вопрос все еще остается:)

Прямо сейчас мой setup.py выглядит примерно так:

from pathlib import Path
from setuptools import setup

root_path = Path(__file__).parent
requirements = (root_path / "requirements.txt").read_text()
requirements = [
    v for v in requirements.split("\n")
    if v.strip() and not v.strip().startswith("#")
]
readme = (root_path / "README.md").read_text()

setup(
    author="mcve",
    author_email="mcve",
    classifiers=["mcve"],
    description="mcve",
    install_requires=requirements,
    keywords=["mcve"],
    long_description=(root_path / "README.md").read_text(),
    name="mcve",
    # package_data = {}, <---- How do i use this?
    # packages = [], <---- Do I need to use this?
    url="mcve",
    version="0.0.1",
)

Ps. И да ... Я уже читал официальные документы об упаковке ... но если бы я понял эти документы, я бы не стал спрашивать об этом на SO; D. Заранее спасибо!

1 Ответ

2 голосов
/ 28 марта 2019

Ну, давай пошагово.


По первому вопросу.В большинстве случаев вам не следует этого делать, вместо этого вы должны рассматривать sublime_text как пакет.Структура должна выглядеть следующим образом:

├───sublime_text
|       __init__.py
│       sublime.py
│       sublime_plugin.py

И вы должны использовать ее как from sublime_text import sublime в других ваших пакетах.Это может быть лучше, поскольку вы не будете слишком сильно загрязнять глобальное пространство имен.Или, если это не обычный пакет, которым вы хотите поделиться между многими другими пакетами, вы можете напрямую включить его как подмодуль в свой основной пакет.

Или, если вы действительно хотите это сделать, вы можете разместить эти двафайлы в корневом каталоге и используйте:

...
packages = find_packages(),
py_modules=["sublime", "sublime_plugin"],
...

Для второго вопроса.Поскольку это пакет, вы можете добавить этот путь к пакетам: packages=[""].Или для удобства вы можете использовать packages=find_packages().Это поможет вам найти все пакеты в текущем каталоге, который является "".


Для вашего третьего вопроса.В основном это не правильно, вам просто нужно представить то, что нужно пользователю в PyPi.Для docs вы должны использовать readthedocs веб-сайт.А для других примеров и тестов просто оставьте их на своем Github.Этого достаточно.

...