几天前,我创建了一个名为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
除了几个问题,我没有几个简单的疑问:
sublime_text/sublime.py
和sublime_text/sublime_plugin.py
文件复制到Lib/site-packages
根目录中的“标准”方法是什么? pyblime
临时复制到Lib/site-packages
中?现在我的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上问这个。预先感谢!
答案 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上即可。够了。