跳至主要內容

如何创建 Python 库

AI悦创原创2021年8月27日随笔随笔大约 8 分钟...约 2344 字

你好,我是悦创。 我最近想要去开始开发 Python 第三方库,但是发现国内这样的教程太少了,所以就我来写吧! 还有就是曾经想创建一个 Python 库,无论是为您的工作团队还是在线的一些开源项目?在此博客中,您将学习如何操作! 当您使用相同的开发工具 Pycharm ,你会最容易跟上我的教程,当然您也可以使用不同的工具。 本文章使用的是工具有:

第 1 步:创建一个要放置库的目录

打开命令提示符并创建一个文件夹,您将在其中创建 Python 库。 请记住:

在我的例子中,我将使用的文件夹是 mypythonlibrary 。将当前工作目录更改为文件夹。

第 2 步:为您的文件夹创建一个虚拟环境

在启动您的项目时,创建一个虚拟环境来封装您的项目总是一个好主意。虚拟环境由某个 Python 版本和一些库组成。参考:这么全的 Python 虚拟环境?不看可惜了! 虚拟环境可防止以后遇到依赖性问题。 例如,在较旧的项目中,您可能使用的是较旧版本的 numpy 库。一些曾经运行良好的旧代码可能会在你更新 numpy 版本后不能正常运行了。 创建虚拟环境可以防止这种情况,当你与其他人协作时,虚拟环境也能确保你的程序在其他人的电脑上正常运行。 接下来,你要确保你当前的工作目录是你刚刚创建的目录,( cd <path/to/folder> ) 中创建 Python 库的文件夹。) 继续并通过键入以下内容创建虚拟环境:

python3 -m venv venv

创建后,你现在必须使用以下命令激活环境:

source venv/bin/activate

PS:Windows

venv\Scripts\activate

激活虚拟环境会修改 PATH 和 shell 的变量,以指向您创建的特定虚拟环境 Python 的设置。PATH 是 Linux 和其他类 Unix 操作系统中的环境变量,它告诉 shell 在响应用户发出的命令时,去搜索哪些目录的 Python 执行环境(即准备运行的程序)。命令提示符将更改为通过添加 ( yourenvname) 来指示您当前所在的虚拟环境。

你要确保你的环境已经安装了 pip、wheel、setuptools、twine。我们稍后将需要它们来构建我们的 Python 库。

sudo pip install wheel setuptools twine

我用的是 Linux 所以,Windows 的话,去掉 sudo。

第 3 步:创建文件夹结构

这一步,也就是创建我们开发库所需要的文件。 在 Pycharm 中,打开您的文件夹 mypythonlibrary(或你自己创建的文件夹名称)。它应该是这样的:

你现在可以开始向项目添加文件夹和文件。您可以通过命令提示符或在 Visual Studio Code 本身中执行此操作。

  1. 创建一个名为 setup.py 这是创建 Python 库时最重要的文件之一!
  2. 创建一个名为 README.md 你可以在此处编写 Markdown 以向其他用户描述我们的库内容。
  3. 创建一个名为 mypythonlib ,或者任何您希望在 pip 安装时调用 Python 库的文件夹。(如果你想稍后发布它,该名称在 pip 上应该是唯一的。)
  4. mypythonlib 文件夹里面,创建名为 __init__.py 基本上,任何包含文件的 __init__.py 文件夹,在我们构建库的时候,包含在库中。大多数情况下,您可以将 __init__.py 文件留空,也就是不用写代码。导入时,其中的 __init__.py 将被执行,因此它应该只包含能够运行您的项目所需的最少量代码。现在,我们将保持原样。
  5. 此外,在 mypythonlib 文件夹中,创建一个名为 myfunctions.py
  6. 最后,在您的根文件夹中创建一个文件夹测试。在里面,创建一个空 __init__.py 文件和一个空的 test_myfunctions.py

你所创建的文件夹和代码文件,现在应如下所示:

第 4 步:为您的库创建内容

要将函数放入库中,您可以将它们放入 myfunctions.py 文件中。例如,复制文件中的 hasrsine 函数:

这个函数将给出两个纬度和经度点之间的距离,单位为米。 每当您编写任何代码时,都强烈建议同时为该代码编写测试。对于 Python 测试,可以使用 pytest 和 pytest-runner 库。在虚拟环境中安装库:

pip install pytest
pip install pytest-runner
pip install numpy

让我们为 haversine 函数创建一个小测试。复制以下内容并将其放入 test_myfunctions.py 文件中:

from mypythonlib import myfunctions


def test_haversine():
    assert myfunctions.haversine(52.370216, 4.895168, 52.520008,
                                 13.404954) == 945793.4375088713

最后,让我们创建一个 setup.py 文件,它将帮助我们构建库。setup.py 的内容如下所示:

from setuptools import find_packages, setup

setup(
    name='mypythonlib',
    packages=find_packages(),
    version='0.1.0',
    description='My first Python library',
    author='Me',
    license='MIT',
)

第 5 步:设置您想要创建的包

虽然原则上 find_packages() 可以不带任何参数使用,但这可能会导致包含不需要的包。 所以,我们可以这么来写:

setup(
    name='mypythonlib',
    packages=find_packages(include=['mypythonlib']),
    version='0.1.0',
    description='My first Python library',
    author='Me',
    license='MIT',
)

第 6 步:设置库所需的要求

注意,当你的项目被其他人作为依赖项安装时,pip 不会使用requirements.yml/ requirements.txt。 通常,为此,您必须在文件的 install_requirestests_require 参数中指定依赖项 setup.pyInstall_requires 应该仅限于绝对需要的软件包列表。这是因为您不想让用户安装不必要的软件包。 另请注意,你不需要列出属于标准 Python 库的包。 如果你用的是 Python 自带的库,是可以不用写的,并且保证这个库是一直到现在的 Python 本版的可以使用的。 也许你还记得我们 pytestnumpy 之前安装过这个库。当然,你不想在其中添加 pytest 依赖项。这个包的用户不需要它。为了仅在运行测试时自动安装它,您可以将以下内容添加到您的 setup.py

from setuptools import find_packages, setup

setup(
    name='mypythonlib', # 应用名
    packages=find_packages(include=['mypythonlib']),
    version='0.1.0', # 版本号
    description='My first Python library',
    author='Me',
    license='MIT',
    install_requires=["numpy==1.21.2"], # 依赖列表
    setup_requires=['pytest-runner'],
    tests_require=['pytest==6.2.4'],
    test_suite='tests',
)

运行:将执行存储在 “tests” 文件夹中的所有测试。

python setup.py pytest

第 7 步:构建你的库

现在所有内容都已准备就绪,我们要构建我们的库。确保您当前的工作目录是 /path/to/mypythonlibrary(因此是项目的根文件夹)。在您的命令提示符中,运行:

python setup.py bdist_wheel

您的轮文件存储在现在创建的 “dist” 文件夹中。您可以使用以下方法安装您的库:

pip install /path/to/wheelfile.whl

请注意,您还可以将您的库发布到您工作场所内联网上的内部文件系统,或发布到官方 PyPI 存储库并从那里安装它。 安装 Python 库后,您可以使用以下命令导入它:

import mypythonlib
from mypythonlib import myfunctions

欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!

公众号:AI悦创【二维码】

AI悦创·编程一对一

AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh

C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh

方法一:QQ

方法二:微信:Jiabcdefh

你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
通知
关于编程私教&加密文章

Your primary language is en-US, do you want to switch to it?

您的首选语言是 en-US,是否切换到该语言?