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

时间:2019-03-28 00:38:05

标签: python packaging pypi pyblime

几天前,我创建了一个名为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中?
  • 最后,将测试/示例/测试/文档/数据上传到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上问这个。预先感谢!

1 个答案:

答案 0 :(得分: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上即可。够了。

相关问题