由于还没有人讨论过OP的这个问题:
我想做的事:
使用“pip install ...”制作一个可安装的python模块
setuptools
这是一个绝对最小的示例,显示了使用和准备和上传包到 PyPI 的基本步骤twine
。
这绝不是至少阅读教程的替代品,它比这个非常基本的示例所涵盖的内容要多得多。
这里的其他答案已经涵盖了创建包本身,因此让我们假设我们已经涵盖了该步骤并且我们的项目结构如下:
.
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
为了setuptools
用于打包,我们需要添加一个文件setup.py
,该文件进入我们项目的根文件夹:
.
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
至少,我们为我们的包指定元数据,我们setup.py
看起来像这样:
from setuptools import setup
setup(
name='hellostackoverflow',
version='0.0.1',
description='a pip-installable package example',
license='MIT',
packages=['hellostackoverflow'],
author='Benjamin Gerfelder',
author_email='benjamin.gerfelder@gmail.com',
keywords=['example'],
url='https://github.com/bgse/hellostackoverflow'
)
由于我们已经设置license='MIT'
,我们在我们的项目中包含一个副本LICENCE.txt
,以及 reStructuredText 中的自述文件README.rst
:
.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
至此,我们准备开始使用 打包setuptools
,如果我们还没有安装它,我们可以安装它pip
:
pip install setuptools
为了做到这一点并source distribution
在我们的项目根文件夹中创建一个,我们setup.py
从命令行调用我们的,指定我们想要的sdist
:
python setup.py sdist
这将创建我们的分发包和 egg-info,并产生一个像这样的文件夹结构,我们的包位于dist
:
.
├── dist/
├── hellostackoverflow.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
此时,我们有一个可以使用 安装的包pip
,所以从我们的项目根目录(假设您具有本示例中的所有命名):
pip install ./dist/hellostackoverflow-0.0.1.tar.gz
如果一切顺利,我们现在可以打开一个 Python 解释器,我会在项目目录之外的某个地方说,以避免任何混淆,并尝试使用我们闪亮的新包:
Python 3.5.2 (default, Sep 14 2017, 22:51:06)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from hellostackoverflow import hellostackoverflow
>>> hellostackoverflow.greeting()
'Hello Stack Overflow!'
现在我们已经确认包安装和工作,我们可以将它上传到 PyPI。
由于我们不想用我们的实验污染实时存储库,我们为测试存储库创建一个帐户,并twine
为上传过程安装:
pip install twine
现在我们快到了,创建帐户后,我们只需告诉twine
上传我们的包,它会询问我们的凭据并将我们的包上传到指定的存储库:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
我们现在可以在 PyPI 测试存储库上登录我们的帐户,并惊叹于我们新上传的包一段时间,然后使用以下命令获取它pip
:
pip install --index-url https://test.pypi.org/simple/ hellostackoverflow
正如我们所看到的,基本过程并不是很复杂。正如我之前所说,它的内容远不止于此,因此请继续阅读本教程以获得更深入的解释。