关于打包首个PyPi项目的问题

2024-09-30 16:33:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

还有,是的。。。我已经看过官方关于包装的文件了。。。但如果我理解了那些文件,我就不会这么问这个问题了;D。提前谢谢


Tags: 文件path项目textpytestsetuproot
1条回答
网友
1楼 · 发布于 2024-09-30 16:33:54

好吧,让我们一步一步来


第一个问题。大多数情况下,您不应该这样做,相反,您也应该将sublime_text视为一个包。结构应如下所示:

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

您应该像在其他包中一样使用它。这可能会更好,因为您不会太多地污染全局命名空间。或者,如果这不是您想要在许多其他包之间共享的公共包,您可以直接将其作为子模块包含在主包中

或者如果您真的想这样做,可以将这两个文件放在根目录中并使用:

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

关于第二个问题。因为这是一个包,所以可以将该路径添加到包:packages=[""]。或者为了方便起见,您可以使用packages=find_packages()。它将帮助您在当前目录""下查找所有包


关于你的第三个问题。大多数情况下是不正确的,您只需要将用户需要的内容提交给PyPi。对于docs,您应该使用readthedocs网站。对于其他示例和测试,只需将它们留在Github上。够了

相关问题 更多 >