关于打包第一个PyPi项目的问题

问题描述 投票:0回答:1

几天前我创建了一个名为pyblime的小项目,现在我正试图弄清楚如何创建一个正确的setup.py,它允许我将“正确的东西”上传到PyPi,这样用户就可以享受这个项目了。通过使用pip而不做任何“过于花哨”的事情,比如调用花哨的自定义开发脚本,现在项目树结构如下所示:

│   .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

我没有一个简单的疑问,而不是一个问题:

  • 指示setup.py将sublime_text/sublime.pysublime_text/sublime_plugin.py文件复制到Lib/site-packages根目录的“标准”方法是什么?
  • 你怎么告诉setup.py在pyblime中复制整个文件夹Lib/site-packages adhoc?
  • 最后,将测试/ examples / tests / docs / data上传到PyPi是否正确?这就是使用SDK /库本身不需要的内容......如果不是,那么你将在哪里包含这种类型的数据......我知道存在sdist和dist文件夹的概念我就是已经读了一下关于它here,但问题仍然存在:)

现在我的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。提前致谢!

python packaging pypi pyblime
1个回答
2
投票

好吧,让我们一步一步来。


对于第一个问题。大多数情况下你不应该这样做,相反,你应该考虑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上。这就够了。

© www.soinside.com 2019 - 2024. All rights reserved.