我写了一个小模块,我想知道打包它以将其发送到pypi的基本步骤是什么:
- 什么是文件层次结构?
- 我应该如何命名文件?
- 我应该使用 distutils 创建 PKG-INFO 吗?
- 我应该在哪里包含我的文档(用 sphinx 制作)?
我推荐阅读The Hitchhiker's Guide to Packaging。具体来说,您应该查看快速入门部分,其中描述了如何:
- 布置你的项目
- 描述你的项目
- 创建您的第一个版本
- 使用 Python 包索引 (PyPI) 注册您的包
- 上传你的版本,然后拿起你的毛巾,拯救宇宙!
您还应该查看包装介绍部分中的包装当前状态,因为这有助于解开围绕 setuptools、distutils、distutils2 和分发的一些混淆。
以下摘录来自PEP8,它回答了您有关如何命名文件的问题:
模块应该有简短的全小写名称。如果提高可读性,可以在模块名称中使用下划线。Python 包也应该有简短的全小写名称,尽管不鼓励使用下划线。
由于模块名称映射到文件名,并且某些文件系统不区分大小写并截断长名称,因此选择相当短的模块名称很重要——这在 Unix 上不是问题,但它可能是一个将代码传输到较旧的 Mac 或 Windows 版本或 DOS 时出现问题。
一个例子始终是了解如何做的最好方法:
也许这个 CheeseShopTutorial对你有帮助。从那里:
将包提交到包索引
如果您有一些 Python 模块或包想与 Python 社区共享,我们很乐意将它们包含在 Python 包索引中!首先,如果您还没有这样做,您将需要组织您的项目。您可以遵循 ProjectFileAndDirectoryLayout 中的指南。之后,您需要阅读有关创建发行版的 Python 文档:http: //docs.python.org/distutils/index.html。
您还可以查看Tarek 的“专家 Python 编程”一书中Tarek Ziadé 撰写的用 Python 编写包,其中详细解决了有关开发和分发的问题
Matthew Rankin 的回答告诉您如何组织您的项目文件层次结构,但我发现自己每次想在 PyPI 上更新项目时都必须查找要执行的命令。所以他们在这里:
setup.py
文件(这里是一个例子)
python setup.py sdist
python setup.py bdist_wheel
python setup.py register
twine upload dist/*
在 PyPi 站点上查找您的包: https ://pypi.python.org/pypi?%3Aaction=index
在另一台机器上尝试运行:
pip install [your package name]
最重要的是做好准备setup.py
。然后:
setup.py sdist bdist_wheel
生成分发档案到 dist/
文件夹twine upload dist/*
将档案上传到 PyPi(使用您的 PyPi 用户名/密码)这是一个例子setup.py
:
from setuptools import setup, find_packages
with open('README.md') as readme_file:
README = readme_file.read()
with open('HISTORY.md') as history_file:
HISTORY = history_file.read()
setup_args = dict(
name='elastictools',
version='0.1.2',
description='Useful tools to work with Elastic stack in Python',
long_description_content_type="text/markdown",
long_description=README + '\n\n' + HISTORY,
license='MIT',
packages=find_packages(),
author='Thuc Nguyen',
author_email='gthuc.nguyen@gmail.com',
keywords=['Elastic', 'ElasticSearch', 'Elastic Stack', 'Python 3', 'Elastic 6'],
url='https://github.com/ncthuc/elastictools',
download_url='https://pypi.org/project/elastictools/'
)
install_requires = [
'elasticsearch>=6.0.0,<7.0.0',
'jinja2'
]
if __name__ == '__main__':
setup(**setup_args, install_requires=install_requires)
你可以在这里找到更详细的教程:https ://medium.com/@thucnc/how-to-publish-your-own-python-package-to-pypi-4318868210f9