脚本语言有其存在的意义
python和rust互为表里,未来可以创造无限可能。
uv sync 和 uv lock 和 uv build 的区别
| 命令 |
核心功能 |
主要作用 |
典型使用场景 |
| uv lock |
依赖解析与锁定 |
读取 pyproject.toml,解析依赖树,生成或更新精确的 uv.lock锁文件。此命令只生成文件,不安装任何包。 |
修改依赖后,确保团队或CI/CD环境获得完全一致的依赖树。 |
| uv sync |
环境同步与安装 |
根据 uv.lock文件的内容,安装、升级或卸载包,使当前虚拟环境与锁文件定义的状态完全一致。 |
1. 克隆项目后,一键复现依赖环境。2. 确保开发、测试、生产环境的一致性。 |
| uv build |
项目打包 |
将你的源代码和资源文件打包成可分发的标准格式(如 wheel或 sdist)。 |
准备将项目发布到 PyPI 或私有仓库,或交付给用户。 |
如何选择与最佳实践
- 日常开发中最常用:uv sync。无论是拉取新代码后还是修改依赖后,它都是确保环境正确的核心命令。
- 修改依赖后必须运行:uv lock。当你使用 uv add或手动修改 pyproject.toml后,uv 通常会智能地自动处理锁文件更新。但在某些复杂情况下,显式运行 uv lock是良好实践。
- 发布项目前使用:uv build。它的用途非常专一,仅在需要分发或发布你的项目时使用。
- 一个关键的最佳实践是:将 uv.lock文件提交到版本控制系统(如 Git)中。这能保证所有协作者和部署环境都能复现完全一致的依赖环境,避免“在我电脑上是好的”这类问题。
cpython的编译
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
$ yum install -y libffi-devel zlib-devel bzip2-devel xz-devel
# 如果yum install zlib-devel时报错,就需要使用如下的编译安装了
# python依赖zlib,否则代码中引用zlib时会报fatal error zlib.h No such file or directory错误
$ wget http://www.zlib.net/zlib-1.2.11.tar.gz
$ tar -xzf zlib-1.2.11.tar.gz
$ cd zlib-1.2.11
$ ./configure --shared
$ make test
$ make install
$ cp zutil.h /usr/local/include
$ cp zutil.c /usr/local/include
# 编译openssl静态库
$ wget https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_1_1_1w.tar.gz
$ tar -xzf OpenSSL_1_1_1w.tar.gz
$ cd openssl-OpenSSL_1_1_1w
$ ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl no-shared threads
$ make -j16
$ make install
# 编译python
$ wget https://github.com/python/cpython/archive/refs/tags/v3.9.19.tar.gz
$ tar -xzf v3.9.19.tar.gz
$ cd cpython-3.9.19
# gcc编译可以分为四个主要阶段:预处理、编译、汇编和链接
# CPPFLAGS: 指定预处理器(c/c++ PreProcessor)的选项或标志,例如头文件路径(通过 -I 选项指定)、宏定义(通过 -D 选项指定)。
# CFLAGS: 指定C编译器的选项;CXXFLAGS: 指定C++编译器的选项
# LDFLAGS: 指定链接器(c/c++ linker)的选项或标志,例如库文件的搜索路径、需要链接的库以及链接器的行为控制选项。
# CPATH: 指定头文件搜索路径,适用于所有语言。类似于-I选项,但在命令行上用-I给出的任何路径之后使用
# LIBRARY_PATH: 在链接阶段使用的库搜索路径。这类似于-L选项,用来指定链接时需要搜索的库目录
# LD_LIBRARY_PATH: 运行时动态链接器使用的库搜索路径。这个环境变量影响程序在运行时如何找到所需的共享库(.so文件)
# LANG:指定编译器要使用的字符集;LC_ALL:覆盖所有局部化设置,包括字符分类等
# python给vim使用时,must be compiled with --enable-shared (or --enable-framework on macOS)
$ ./configure LDFLAGS="-L/usr/local/openssl/lib -Wl,-rpath,/usr/local/openssl/lib" CPPFLAGS="-I/usr/local/openssl/include" --with-openssl=/usr/local/openssl/ --prefix /home/jiaweicheng/.python39 --enable-shared
$ make -j16
$ make install
$ vim ~/.bashrc
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/jiaweicheng/.python/lib
$ source ~/.bashrc
# 测试: ~/.python/bin/python3 -c "import sysconfig; print(sysconfig.get_config_var( 'INCLUDEPY' ))"
# 编译参数的位置: ./lib/python3.9/config-3.9-x86_64-linux-gnu/Makefile
|
工具
文字转语音工具: https://github.com/rany2/edge-tts
本文发表于 0001-01-01,最后修改于 0001-01-01。
本站永久域名「 jiavvc.top
」,也可搜索「 极客油画 」找到我。
上一篇 «
下一篇 »
推荐阅读
位图
发表于2021-07-17,
全文21字,
阅读约1分钟
Untitled
发表于0001-01-01,
全文4884字,
阅读约17分钟
Untitled
发表于0001-01-01,
全文397字,
阅读约2分钟