极客油画

脚本语言有其存在的意义

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 」,也可搜索「 极客油画 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image