几天前我创建了一个名为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
adhoc?现在我的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。提前致谢!
好吧,让我们一步一步来。
对于第一个问题。大多数情况下你不应该这样做,相反,你应该考虑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上。这就够了。