【问题标题】:Questions about packaging the first PyPi project关于打包第一个PyPi项目的问题
【发布时间】:2019-08-18 16:31:30
【问题描述】:

几天前,我创建了一个名为 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

我有几个简单的疑问,而不是 1 个问题:

  • 指示 setup.py 将 sublime_text/sublime.pysublime_text/sublime_plugin.py 文件复制到 Lib/site-packages 根目录的“标准”方式是什么?
  • 你是如何告诉 setup.py 将整个文件夹 pyblime adhoc 复制到 Lib/site-packages 中的?
  • 最后,将测试/示例/测试/文档/数据上传到 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",
)

附言。是的...我已经阅读了有关包装的官方文档...但是如果我了解这些文档,我就不会在 SO ;D 上问这个问题。提前致谢!

【问题讨论】:

    标签: python packaging pypi pyblime


    【解决方案1】:

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


    对于第一个问题。大多数情况下,您不应该这样做,相反,您也应该将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 上即可。够了。

    【讨论】:

      猜你喜欢
      • 2016-07-13
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多