侵权投诉

一步一步教你如何去发布Python项目开源包?

马哥Linux运维 2021-06-10 14:22 次阅读

注意:本文假设你在 GitHub 上已经有一个想要打包和发布的项目。

第 0 步:获取项目许可证

在做其他事之前,由于你的项目要开源,因此应该有一个许可证。获取哪种许可证取决于项目包的使用方式。开源项目中一些常见许可证有 MIT 或 BSD。

要在项目中添加许可证,只需参照以下链接中的步骤,将 LICENSE 文件添加到项目库中的根目录即可:https://help.github.com/en/articles/adding-a-license-to-a-repository

第 1 步:让你的代码准备就绪

要将项目进行打包,你需要做一些预备工作:

让你的项目结构正确就位。通常情况下,项目库的根目录包含一个以项目名称命名的文件夹,项目的核心代码应该位于此文件夹中。在这个文件夹之外是运行和构建包(测试、文档等)所需的其他代码。

核心文件夹应包括一个(或多个)模块和一个 __init__.py 文件,该文件包含你希望让终端用户访问的类/函数。此文件还可以包含包的版本,以便于终端用户访问。

理想情况下,应使用 logging 包来设置合理的日志记录系统(而不是用 prints 输出)。

理想情况下,应将你的核心代码分配到一个或多个类中。

from .estimate import Estimator

以__init__.py 为例,如果 Estimator 是终端用户将会访问的类(该类在 estimate.py 文件中定义)

import logging

class LogMixin(object):

@property

def logger(self):

name = ‘。’.join([self.__module__, self.__class__.__name__])

FORMAT = ‘%(name)s:%(levelname)s:%(message)s’

logging.basicConfig(format=FORMAT, level=logging.DEBUG)

logger = logging.getLogger(name)

return logger

以日志系统为例:LogMixin 类可以在其他任何类中使用

第 2 步:使用打包工具创建 setup.py

在你的项目有了一套结构之后,你应该在项目库的根目录下添加 setup.py 文件。这有助于所有发布和版本维护过程的自动化。以下是 setup.py 的例子

from setuptools import setup

from os import path

DIR = path.dirname(path.abspath(__file__))

INSTALL_PACKAGES = open(path.join(DIR, ‘requirements.txt’)).read().splitlines()

with open(path.join(DIR, ‘README.md’)) as f:

README = f.read()

setup(

name=‘scitime’,

packages=[‘scitime’],

description=“Training time estimator for scikit-learn algorithms”,

long_description=README,

long_description_content_type=‘text/markdown’,

install_requires=INSTALL_PACKAGES,

version=‘0.0.2’,

url=‘http://github.com/nathan-toubiana/scitime’,

author=‘Gabriel Lerner & Nathan Toubiana’,

author_email=‘toubiana.nathan@gmail.com’,

keywords=[‘machine-learning’, ‘scikit-learn’, ‘training-time’],

tests_require=[

‘pytest’,

‘pytest-cov’,

‘pytest-sugar’

],

package_data={

# include json and pkl files

‘’: [‘*.json’, ‘models/*.pkl’, ‘models/*.json’],

},

include_package_data=True,

python_requires=‘》=3’

setup.py 文件的示例

几点注意事项:

如果你的包有依赖项,处理这些依赖项的简单方法是在配置文件中通过 install_requires 参数来添加依赖项(如果列表很长,你可以像之前那样指向一个 requirement.txt 文件)。

如果你希望在任何人安装包时(从项目库中)下载元数据,则应通过 package_data 参数来添加这些元数据。

注意:第 3 步到第 6 步是可选的(但强烈推荐),但是如果你现在马上想发布你的包,可以直接跳到第 7 步。

第 3 步:设置本地测试和检查测试覆盖率

此时还没有完成,你的项目还应该有单元测试。尽管有许多框架能帮助你做到,但一种简单的方法是使用 pytest。所有测试都应该放在一个专用的文件夹中(例如名为 tests/或 testing 的文件夹)。在这个文件夹中放置你需要的所有测试文件,以便尽可能多地包含你的核心代码。下面是一个如何编写单元测试的示例。这里还有一个 SciTime 的测试文件。

一旦就位,你就可以通过在项目库的根目录运行 python -m pytest 在本地进行测试。

创建测试后,你还应该能估算覆盖率。这一点很重要,因为你希望尽可能多地测试项目中的代码量(以减少意外的 bug)。

很多框架也可以用于计算覆盖率,对于 SciTime,我们使用了 codecov。你可以通过创建.codecov.yml 文件来决定允许的最小覆盖率阈值,还可以通过创建.coveragerc 文件来决定要在覆盖率分析中包含哪些文件。

comment: false

coverage:

status:

project:

default:

target: auto

threshold: 10%

patch:

default:

target: auto

threshold: 10%

.codecov.yml 文件示例

[run]

branch = True

source = scitime

include = */scitime/*

omit =

*/_data.py

*/setup.py

.coveragerc 文件示例

第 4 步:标准化语法和代码风格

你还需要确保你的代码遵循 PEP8 准则(即具有标准样式并且语法正确)。同样,有很多工具可以帮助你解决。这里我们用了 flake8。

第 5 步:创建一个合理的文档

现在你的项目已经测试过了,结构也很好了,是时候添加一个合理的文档。首先是要有一个好的 readme 文件,它会在你的 Github 项目库的根目录上显示。完成后,加上以下几点会更好:

Pull 请求和 issue 模板:当创建新的 Pull 请求或 issue 时,这些文件可以根据你的需求给你的描述提供模板。

贡献指南(contribution guide)。应该在贡献指南中简单地说明你希望外部用户如何协助你改进这个包。

由于 readme 文件应该相当综合,因此通常会有一个更详细的文档。你可以用 sphinx 来完成,然后在 readthedocs 上管理文档。与文档相关的文件通常放在 docs/文件夹中。

第 6 步:创建持续集成

此时,你的项目离发布就绪不远了。但是,在每次提交之后,必须更新文档、运行测试以及检查样式和覆盖率似乎有点难以应付。幸运的是,持续集成(CI)可以帮助你完成。你可以在每次提交之后使用 GitHub 的 webhook 来自动执行所有的这些操作。以下是我们在 SciTime 中使用的一套 CI 工具:

对于运行测试,我们使用了 travis ci 和 appveyor(用于 Windows 平台上的测试)。对于 Travis CI,除了在项目库上设置 webhook 之外,你还必须创建一个.travis.yml 文件,在该文件中,你不仅可以运行测试,还可以上传更新的覆盖率输出以及检查样式和格式。通过创建 appveyor.yml 文件,appveyor 也可以这样做。

codecov 和 readthdocs 也有专用的 webhook

language: python

python:

- “3.6”

# command to install dependencies

install:

- pip install -r requirements.txt

- pip install flake8

- pip install pytest-cov

- pip install codecov

# command to run tests

script:

- python -m pytest --cov=scitime

- 。/build_tools/flake_diff.sh

after_success:

- codecov

.travis.yml 文件的示例:请注意,每次提交,测试都需要与检查测试覆盖率一起进行。但还有一个 flake8 检查

environment:

matrix:

- PYTHON: “C:\Python36-x64”

install:

# We need wheel installed to build wheels

- “%PYTHON%\python.exe -m pip install -r requirements.txt”

- “%PYTHON%\python.exe -m pip install pytest==3.2.1”

build: off

test_script:

- “%PYTHON%\python.exe -m pytest”

appveyor.yml 文件示例:这里我们只运行测试

这将使更新项目库的整个过程更加容易。

第 7 步:创建你的第一个 release 和 publication

此时,你即将发布的包应与以下类似:

your_package/

__init__.py

your_module.py

docs/

tests/

setup.py

travis.yml

appveyor.yml

.coveragerc

.codecov.yml

README.md

LICENSE

.github/

CODE_OF_CONDUCT.md

CONTRIBUTING.md

PULL_REQUEST_TEMPLATE.md

ISSUE_TEMPLATE/

现在可以发布了!首先要做的是在 GitHub 上创建你的第一个 release——这是为了在给定的时间点跟踪项目的状态,每次版本更改时都需要创建新的 release。

完成后,唯一要做的就是发布包。发布 python 包最常见的平台是 PyPI 和 Conda。以下我们将描述如何用两者发布:

对于 PyPI,首先需要创建一个帐户,然后用 twine 执行一些步骤:https://realpython.com/pypi-publish-python-package/。这应该相当简单,而且 Pypi 还提供了一个可以在实际部署之前使用的测试环境。PyPI 总体上包括创建源代码(python setup.py sdist)并使用 twine(twine upload dist/*)来上传。完成后,应该有一个与你的包对应的 PyPI 页面,并且任何人都应该能够通过运行 pip 命令来安装你的包。

对于 Conda,我们推荐通过 conda forge 来发布你的包,conda forge 是一个社区,帮助你通过 conda 渠道发布和维护包。你可以按照以下步骤将包添加到社区:https://conda-forge.org/#add_recipe,然后你会被添加到 conda forge Github 组织中,并能够非常轻松地维护你的包,然后任何人都可以通过运行 conda 命令来安装你的包。

完成!

现在,你的包应该已经发出去,并且任何人都可以使用了!虽然大部分工作都完成了,但是你仍然需要维护你的项目,你需要进行一些更新:这大体上意味着每次进行重大更改时都要更改版本,创建新的 release,并再次执行第 7 步。

责任编辑:lq6

原文标题:手把手教你发布 Python 项目开源包

文章出处:【微信号:magedu-Linux,微信公众号:C语言专家集中营】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

Python SIG(Python 语言特别兴趣小组)介绍

该特别兴趣小组为 OpenHarmony 设备提供 Python 语言支持扩大 OpenHarmony 开发者,吸引众多 Python 开发者制定和维护 Op...
发表于 08-05 11:35 0次 阅读
Python SIG(Python 语言特别兴趣小组)介绍

如何用Python对数据库中的数据进行增删改查

pyhton如何连接mysql数据库 1、导入模块 2、打开数据库连接 3、创建游标对象cursor....
的头像 Les 发表于 08-05 10:22 94次 阅读
如何用Python对数据库中的数据进行增删改查

IAP功能实现过程遇到的坑

花了四天时间才把IAP功能做好。其中也遇到许多的坑,这次把这次IAP功能实现过程遇到的坑把它分享出来。一开始做iap的时候也...
发表于 08-05 07:51 0次 阅读
IAP功能实现过程遇到的坑

STM32F030的IAP方法

程序收尾总想着以后更新的方便性,采用在应用编程(In Application Programming),通过Bootload引导单片机自己往程序存储器...
发表于 08-05 07:46 0次 阅读
STM32F030的IAP方法

TFTLCD代码与正点原子配套库lcd.c使用

修改自 正点原子F407探索者 TFTLCD代码请与正点原子配套库lcd.c使用,并与lcd.h里添加声明函数//在指定位置画一个实心圆/...
发表于 08-05 07:43 0次 阅读
TFTLCD代码与正点原子配套库lcd.c使用

如何对正点原子stm32F407探索者进行测试

注:此代码只测试于正点原子stm32F407探索者,其他情况请自行修改画圆函数在:注:此代码只测试于正点原子F407探索者,其他情况...
发表于 08-05 07:36 0次 阅读
如何对正点原子stm32F407探索者进行测试

用ADC通道测量电池电量

  最近在使用stm32l151开发一个项目,其中要用到ADC通道测量电池电量。我在网上参照别人stm32f系列的ADC通道使用代码,结...
发表于 08-05 07:20 0次 阅读
用ADC通道测量电池电量

Android手机appTCP通信

(一)手机端android app代码Android app 代码如下:Android手机appTCP通信(二) 单片机STM32单片机主程序代码//代码共计7...
发表于 08-05 07:17 0次 阅读
Android手机appTCP通信

什么是IAP 为什么要IAP

–基于STM32F103ZET6的UART通讯实现一、什么是IAP,为什么要IAPIAP即为In Application Programming(在应...
发表于 08-05 06:09 0次 阅读
什么是IAP  为什么要IAP

IP101GR与IP101GA怎么通信

玩过正点原子的开发板的朋友,就知道LAN8720吧,其实IP101GR和LAN8720是差不多的,唯一不同就是后16位的不一样,其他基...
发表于 08-05 06:05 0次 阅读
IP101GR与IP101GA怎么通信

怎样去编写独立看门狗的实验代码

独立看门狗的实验目的是什么? 怎样去编写独立看门狗的实验代码? 如何对独立看门狗实验进行分析? ...
发表于 08-05 06:01 0次 阅读
怎样去编写独立看门狗的实验代码

Python在嵌入式项目中的辅助开发总结

Python在嵌入式项目中的辅助开发总结(嵌入式开发试题)-该文档为Python在嵌入式项目中的辅助....
发表于 08-04 10:11 2次 阅读
Python在嵌入式项目中的辅助开发总结

基于Python的实时嵌入式软件测试脚本总结

基于Python的实时嵌入式软件测试脚本总结(嵌入式开发技术栈)-该文档为基于Python的实时嵌入....
发表于 07-30 12:31 12次 阅读
基于Python的实时嵌入式软件测试脚本总结

简述Python中深浅拷贝(copy)

在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题。为了防止数据被修改,....
的头像 马哥Linux运维 发表于 07-29 16:55 149次 阅读
简述Python中深浅拷贝(copy)

手动删除python导致的问题如何解决?

情况说明 在ubuntu server 20.02下安装了python 2.7, 3.8.5, 3.....
的头像 云知声 发表于 07-28 09:37 166次 阅读
手动删除python导致的问题如何解决?

居然有比requests更强大Python库出现

最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用“异步”协程的方式实现。看着满....
的头像 阿铭linux 发表于 07-27 10:43 178次 阅读
居然有比requests更强大Python库出现

cache对写好代码真的有那么重要吗

CACHE基础 对cache的掌握,对于Linux工程师(其他的非Linux工程师也一样)写出高效能....
的头像 Linux阅码场 发表于 07-26 15:18 155次 阅读
cache对写好代码真的有那么重要吗

C#语言的简介及重要功能

C# 是类型安全的面向对象的精妙语言,可帮助开发者生成在 .NET Framework 上运行的各种....
的头像 汽车玩家 发表于 07-26 10:23 154次 阅读
C#语言的简介及重要功能

react框架及其作用

React主要用于构建UI,可以与已知的库或框架很好地配合并且可以对DOM的模拟,最大限度地减少与D....
的头像 lhl545545 发表于 07-26 09:29 257次 阅读
react框架及其作用

如何用Python编写一个强大的科学计算环境

Spyder 是一个功能强大的科学计算环境,用 Python 原生编写。 它适用于 Python 开....
的头像 阿铭linux 发表于 07-09 09:51 180次 阅读
如何用Python编写一个强大的科学计算环境

教你们C语言打印如何输出红色字体

除了Linux,在VS下也可以实现变色这一效果,先看下面的一段代码: #include 《stdio....
的头像 STM32嵌入式开发 发表于 07-08 12:48 262次 阅读
教你们C语言打印如何输出红色字体

基于发线虫神经学及 微型机器人相关研究

给一个活体生物躯体注入机器的“大脑”,然后人为控制该生物的行为,已经从科幻片走入现实世界。 近日,国....
的头像 Dialog半导体公司 发表于 07-07 11:43 738次 阅读
基于发线虫神经学及 微型机器人相关研究

认真读完这21句话你的机器学习就算是入门了

【编者按】这是一篇关于机器学习工具包Scikit-learn的入门级读物。对于程序员来说,机器学习的....
的头像 ViTEX机器视觉 发表于 07-06 17:42 425次 阅读
认真读完这21句话你的机器学习就算是入门了

鸿蒙股票代码

       正宗的华为鸿蒙概念股有:常山北明,中科创达,诚迈科技,先进数通,蓝盾股份,北信源, 易....
的头像 汽车玩家 发表于 07-06 17:30 1768次 阅读
鸿蒙股票代码

浅析新塘031 串口PDMA通信

环境搭建这里就跳过了,没啥用,我还是用KEIL 5 开发,自行下载个PACK包安装就好了。点此前往新....
的头像 嵌入式ARM 发表于 07-06 17:16 332次 阅读
浅析新塘031 串口PDMA通信

golang的调度模型-GPM 模型的源码结构

【导读】GMP 模型是让 go 语言轻量快速高效的重要调度模型,本文从 GMP 源码出发直观地解析了....
的头像 Linux爱好者 发表于 07-06 11:55 221次 阅读
golang的调度模型-GPM 模型的源码结构

如何使用Python-OpenCV实现餐盘水果识别与计价的应用

导读本文主要介绍使用Python-OpenCV实现餐盘水果识别与计价的应用。 测试图像与说明 使用图....
的头像 ViTEX机器视觉 发表于 07-06 11:02 498次 阅读
如何使用Python-OpenCV实现餐盘水果识别与计价的应用

基于OpenCV经典霍夫变换的一些内容

本文主要讲述的是霍夫变换的一些内容,并加入一些在生活中的应用,希望能对读者对于霍夫变换的内容有所了解....
的头像 ViTEX机器视觉 发表于 07-06 10:43 242次 阅读
基于OpenCV经典霍夫变换的一些内容

解析CPU究竟是怎么执行一条指令的?

【Linux 从头学】是什么这两年多以来,我的本职工作重心一直是在 x86 Linux 系统这一块,....
的头像 智联开发Arduino 发表于 07-06 10:21 423次 阅读
解析CPU究竟是怎么执行一条指令的?

C语言的函数调用程序和函数逆向分析

IDA可以很好地识别函数的起始位置和结束位置,如果在逆向分析的过程中发现有分析不准确的时候,可以通过....
的头像 嵌入式ARM 发表于 07-05 15:52 191次 阅读
C语言的函数调用程序和函数逆向分析

FPGA动态可重构技术是什么,局部动态可重构的时序问题解决方案

所谓FPGA动态可重构技术,就是要对基于SRAM编程技术的FPGA实现全部或部分逻辑资源的动态功能变....
的头像 OpenFPGA 发表于 07-05 15:41 257次 阅读
FPGA动态可重构技术是什么,局部动态可重构的时序问题解决方案

eBPF是什么以及eBPF能干什么

一、eBPF是什么 eBPF是extended BPF的缩写,而BPF是Berkeley Packe....
的头像 RTThread物联网操作系统 发表于 07-05 15:17 254次 阅读
eBPF是什么以及eBPF能干什么

采用Go开发语言实现海量日志收集系统的开发

高可用的分布式key-value存储,可以用于配置共享和服务发现
的头像 马哥Linux运维 发表于 07-05 14:18 137次 阅读
采用Go开发语言实现海量日志收集系统的开发

OTFDEC硬件模块基于STM32H735G-DK板的验证研发

对这种自然的做法,以往的MCU在执行片外加密代码时,需要先调用OSPI驱动,把密文代码读进来,比如放....
的头像 德州仪器 发表于 07-05 14:03 302次 阅读
OTFDEC硬件模块基于STM32H735G-DK板的验证研发

Zephyr如何在第三方工具链下开启TLS

在Zephyr TLS线程本地存储的实现一文中说明了如何在Zephyr上使用TLS,在这种默认的情况....
的头像 云知声 发表于 07-05 08:58 186次 阅读
Zephyr如何在第三方工具链下开启TLS

嵌入式开发中C语言源代码的应用优化方案

如果一个函数只在实现它的文件中被使用,把它声明为静态的(static)以强制使用内部连接。否则,默认....
的头像 汽车CAN总线 发表于 07-02 16:42 317次 阅读
嵌入式开发中C语言源代码的应用优化方案

对于加解密、加签验签你们有概念吗

面对MD5、SHA、DES、AES、RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公....
的头像 马哥Linux运维 发表于 07-02 11:44 435次 阅读
对于加解密、加签验签你们有概念吗

剖析FPGA灰度直方图线性拉伸

纯工程师社群 直方图线性拉伸相对于直方图均衡化来说就更好理解一些了,即用线性变化将灰度直方图较窄的部....
的头像 智联开发Arduino 发表于 07-02 10:37 191次 阅读
剖析FPGA灰度直方图线性拉伸

如何基于DDS IP实现线性调频信号

利用DDS IP实现线性调频信号 1 DDS技术简介随着电子技术的不断发展,传统的频率合成技术逐渐不....
的头像 智联开发Arduino 发表于 07-02 10:27 244次 阅读
如何基于DDS IP实现线性调频信号

IT行业从0-1了解软件项目的那些事儿

成年人之间的客套,不能信,尤其是IT行业。 最近在忙啥?一起吃个饭? 不了不了,手里还有几个项目呢,....
的头像 马哥Linux运维 发表于 07-02 09:45 234次 阅读
IT行业从0-1了解软件项目的那些事儿

一篇关于CVPR‘21使用RL做点云图像配准

深度强化学习(Deep RL)可以通过序列决策式的方式,在很多方面得到应用。这里我们主要介绍一篇CV....
的头像 ViTEX机器视觉 发表于 07-02 08:57 279次 阅读
一篇关于CVPR‘21使用RL做点云图像配准

关于FPGA的直接扩频通信系统设计

导读 本篇适用于有一定通信基础的大侠,本篇使用的理论不仅仅是扩频通信。为了便于学习,本章将会以实战的....
的头像 FPGA技术江湖 发表于 07-01 10:31 229次 阅读
关于FPGA的直接扩频通信系统设计

全面介绍主调模块,以及GUI模块的编写

摘要:本节主要介绍主调模块,以及GUI模块的编写。 主调模块 终于到了主调模块了,之前的章节主要介绍....
的头像 硬件攻城狮 发表于 06-30 15:23 187次 阅读
全面介绍主调模块,以及GUI模块的编写

一文带你彻底搞懂多线程中各个难点

1.什么是线程? linux内核中是没有线程这个概念的,而是轻量级进程的概念:LWP。一般我们所说的....
的头像 EDA365电子论坛 发表于 06-30 15:00 970次 阅读
一文带你彻底搞懂多线程中各个难点

看微软低代码平台如何助力转型?

2021年6月19日,由低码时代、RPA 中国联合主办的「低代码应用与发展论坛」在北京 The Fu....
的头像 微软科技 发表于 06-30 10:12 240次 阅读
看微软低代码平台如何助力转型?

如何通过卡片进行直达教育类专栏分类照片

# 前言 对于教育类应用程序来说,一般都有课程分类,包括我们程序员学习技术,也简单。简单的说,一个程....
的头像 HarmonyOS官方合作社区 发表于 06-30 09:43 214次 阅读
如何通过卡片进行直达教育类专栏分类照片

解读12 种 Numpy 和 Pandas 高效函数技巧

本文分享给大家 12 种 Numpy 和 Pandas 函数,这些高效的函数会令数据分析更为容易、便....
的头像 马哥Linux运维 发表于 06-29 17:05 320次 阅读
解读12 种 Numpy 和 Pandas 高效函数技巧

机器学习在卫星遥测分析建模中的应用综述

机器学习在卫星遥测分析建模中的应用综述
发表于 06-29 16:40 43次 阅读
机器学习在卫星遥测分析建模中的应用综述

如何利用Python实现快速Ping一个IP网段地址?

ping 命令是我们检查网络中最常用的命令,作为网络人员,基本上每天都会用到,可以很好地帮助我们分析....
的头像 马哥Linux运维 发表于 06-29 15:59 417次 阅读
如何利用Python实现快速Ping一个IP网段地址?

简述C语言中的内存泄漏的原理及解决方法

内存泄漏的原理 只有在堆内存里面才会发生内存泄漏的问题,在栈内存中不会发生内存泄漏。因为栈内存在自动....
的头像 嵌入式ARM 发表于 06-29 14:58 242次 阅读
简述C语言中的内存泄漏的原理及解决方法

探索C语言入门基础之缓冲区

01 — C标准库缓冲区探索 在计算机里缓存是一个很重要的概念,C标准库里大量使用了缓存,最为典型的....
的头像 QNX 发表于 06-28 17:24 228次 阅读
探索C语言入门基础之缓冲区

使用实时操作系统和类型1 Hypervisor设计物联网系统

到现在为止我们已经说明了设计物联网系统的两种可能的方法,实时操作系统的使用和类型1 Hypervis....
的头像 电子设计 发表于 06-28 15:45 408次 阅读
使用实时操作系统和类型1 Hypervisor设计物联网系统

Excel真的可以调用HFSS?

学个Antenna是以天线仿真和调试为主,理论原理为辅的干货天线技术专栏,包括天线入门知识以及各类天....
的头像 硬件攻城狮 发表于 06-28 15:34 276次 阅读
Excel真的可以调用HFSS?

信驰达模块RF-CC2540TA1及BLE协议概述

桥接模式下,用户CPU可以通过模块的通用串口和移动设备进行双向通讯,用户也可以通过特定的串口AT指令....
的头像 电子设计 发表于 06-28 14:36 294次 阅读
信驰达模块RF-CC2540TA1及BLE协议概述

Flask + Vue的Web 框架 Flask 开发的词云生成应用

前言这是一个前端用 Vue,后端用 Python 的 Web 框架 Flask 开发的词云生成应用,....
的头像 马哥Linux运维 发表于 06-28 09:30 192次 阅读
Flask + Vue的Web 框架 Flask 开发的词云生成应用

详解什么是STM32对其Flash的保护

如果你还不了解什么是STM32对其Flash的保护,那么就由小橙同学来给你讲解一下什么是STM32的....
的头像 嵌入式ARM 发表于 06-27 11:41 606次 阅读
详解什么是STM32对其Flash的保护

简述FPGA的图像高斯滤波

在知乎上看到一个比较有意思的话题,卷积为什么叫”卷“积?哈哈哈哈哈 其中有个动图用卷毛巾生动形象的比....
的头像 智联开发Arduino 发表于 06-27 11:08 389次 阅读
简述FPGA的图像高斯滤波