本文的写作环境,喜欢这种黑暗+昏暗的灯光
缘起~为什么会有这样的一篇文章呢?因为我最近在读Python的官方文档,里面正好读到了这里安装Python模块,然后我天天也在读源码,也在实践中得到了一些佐证。所以记录一下。
这一切是一个组织在维护:
https://www.pypa.io/en/latest/
Python Packaging Authority (PyPA) 是一个工作组,负责维护 Python 打包中使用的一组核心软件项目。
这里我找一个库作为说明:
https://github.com/3b1b/manim
使用这个
https://docs.manim.org.cn/
https://3b1b.github.io/manim/
然后解压,看到这些,今天就说这些
这里是打印Python的版本
https://packaging.python.org/
关于我这篇文章的参考位置
py -m pip --version
pip 21.3.1 from C:\Users\yunswj\AppData\Local\Programs\Python\Python36\lib\site-packages\pip (python 3.6)
打印PIP的版本。
https://packaging.python.org/tutorials/packaging-projects/
看这个
https://pip.pypa.io/en/stable/
https://setuptools.pypa.io/en/latest/
py -m pip install --upgrade pip
pip的源文件样子
packaging_tutorial/
└── src/
└── example_package/
├── __init__.py
└── example.py
未来写库应该写的是这样的
我们创建一个
pyproject.toml告诉构建工具(如pip和build)构建项目需要什么。
给出要构建包的依赖包
我们的manim,这里也有写法
有两种类型的元数据:静态和动态。
setup.cfg
):保证每次都相同。这更简单、更易于阅读,并避免了许多常见错误,例如编码错误。setup.py
):可能是不确定的。任何动态的或在安装时确定的项目,以及扩展模块或 setuptools 的扩展,都需要进入setup.py
.setup.cfg
应首选静态元数据 ( )。动态元数据 ( setup.py
) 应仅在绝对必要时用作逃生舱口。setup.py
过去是必需的,但在较新版本的 setuptools 和 pip 中可以省略。
这个是demo的例子:
[metadata]
name = example-pkg-YOUR-USERNAME-HERE
version = 0.0.1
author = Example Author
author_email = author@example.com
description = A small example package
long_description = file: README.md
long_description_content_type = text/markdown
url = https://github.com/pypa/sampleproject
project_urls =
Bug Tracker = https://github.com/pypa/sampleproject/issues
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
[options]
package_dir =
= src
packages = find:
python_requires = >=3.6
[options.packages.find]
where = src
setuptools的例子:
[metadata]
name = my_package
version = attr: src.VERSION
description = My package description
long_description = file: README.rst, CHANGELOG.rst, LICENSE.rst
keywords = one, two
license = BSD 3-Clause License
classifiers =
Framework :: Django
License :: OSI Approved :: BSD License
Programming Language :: Python :: 3
Programming Language :: Python :: 3.5
[options]
zip_safe = False
include_package_data = True
packages = find:
scripts =
bin/first.py
bin/second.py
install_requires =
requests
importlib; python_version == "2.6"
[options.package_data]
* = *.txt, *.rst
hello = *.msg
[options.entry_points]
console_scripts =
executable-name = package.module:function
[options.extras_require]
pdf = ReportLab>=1.2; RXP
rest = docutils>=0.3; pack ==1.1, ==1.3
[options.packages.find]
exclude =
src.subpackage1
src.subpackage2
相当于教科书级别的写法了
把我们的元文件复制进来
https://setuptools.pypa.io/en/latest/userguide/declarative_config.html
这个是语法,是和win ini文件一样的配置文件
配置文件由部分组成,每个部分由一个[section]
标题引导,后跟由特定字符串(=
或:
默认情况下为1)分隔的键/值条目。默认情况下,部分名称区分大小写,但键不是 1。从键和值中删除前导和尾随空格。如果解析器配置为允许它1,则可以省略值,在这种情况下,键/值分隔符也可以省略。值也可以跨越多行,只要它们比值的第一行缩进得更深。根据解析器的模式,空行可能被视为多行值的一部分或被忽略。
大概就是这样的一个情况
https://pypa-build.readthedocs.io/en/stable/index.html
构建工具的地址
执行后报错,我查了一下,应该是在虚拟环境构建
https://packaging.python.org/tutorials/installing-packages/#creating-virtual-environments
在这篇里面有论述
python.exe -m venv C:\Users\yunswj\Desktop\tf
但是我不会用
pip install virtualenv
先安装这个工具
python3 -m venv .
在当前环境建立一个虚拟环境
然后激活一下
新环境就两个包
py -m pip install --upgrade build
安装构建工具
py -m build
我构建失败了
取消激活环境,删除就行
https://zhuanlan.zhihu.com/p/42561895
参考文章
在当前目录创建虚拟环境
$ python3 -m venv .
在当前目录创建独立的python环境
$ virtualenv --no-site-packages venv
激活虚拟环境
$ source venv/bin/activate
停用虚拟环境
$ deactivate
删除虚拟环境
$ rm -rf venv
操,一到动手,一堆错误,mb。。。你就当我构建成功了。
一般这样的目录就是一个不错的包
一个好的包一定少不了一个文档,那下面就安装一下
py -m pip install -U sphinx
安装好以后
sphinx-quickstart
执行这个
按照提示摁
构建
就构建出来了
https://docs.readthedocs.io/en/latest/intro/import-guide.html
这里有更多的细节
注意的是venv才是最新的构建方式
如果你执行的话,会有让你选择解释器的选项