in `require_frameworks': no such file to load -- openssl

本文介绍了一个关于Rails框架中openssl库加载失败的问题及其解决方案。该问题发生在/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:259:in `require_frameworks',错误提示为nosuchfiletoload--openssl。解决方案是通过运行命令apt-get install libopenssl-ruby来安装所需的包。

/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:259:in `require_frameworks': no such file to load -- openssl (RuntimeError)

安装如下包就可以了:
apt-get install libopenssl-ruby
Looking in indexes: https://pypi.python.org/simple Collecting cryptography Downloading cryptography-45.0.6.tar.gz (744 kB) ---------------------------------------- 744.9/744.9 kB 3.2 MB/s 0:00:00 Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Requirement already satisfied: cffi>=1.14 in d:\desktop\乐骐编程\python 3.13.5\lib\site-packages (from cryptography) (1.17.1) Requirement already satisfied: pycparser in d:\desktop\乐骐编程\python 3.13.5\lib\site-packages (from cffi>=1.14->cryptography) (2.22) Building wheels for collected packages: cryptography Building wheel for cryptography (pyproject.toml) ... error error: subprocess-exited-with-error × Building wheel for cryptography (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [189 lines of output] Running `maturin pep517 build-wheel -i D:\Desktop\乐骐编程\python 3.13.5\python3.13t.exe --compatibility off` 馃嵐 Building a mixed python/rust project 馃敆 Found pyo3 bindings with abi3 support 馃悕 Found CPython 3.13t at D:\Desktop\涔愰獝缂栫▼\python 3.13.5\python3.13t.exe 馃摗 Using build options locked from pyproject.toml 鈿狅笍 Warning: CPython 3.13t at D:\Desktop\涔愰獝缂栫▼\python 3.13.5\python3.13t.exe does not yet support abi3 so the build artifacts will be version-specific. Compiling target-lexicon v0.13.2 Compiling proc-macro2 v1.0.95 Compiling unicode-ident v1.0.18 Compiling shlex v1.3.0 Compiling once_cell v1.21.3 Compiling vcpkg v0.2.15 Compiling pkg-config v0.3.32 Compiling libc v0.2.172 Compiling cc v1.2.23 Compiling autocfg v1.4.0 Compiling openssl v0.10.72 Compiling foreign-types-shared v0.1.1 Compiling memoffset v0.9.1 Compiling heck v0.5.0 Compiling foreign-types v0.3.2 Compiling cfg-if v1.0.0 Compiling bitflags v2.9.1 Compiling itoa v1.0.15 Compiling indoc v2.0.6 Compiling unindent v0.2.4 Compiling cryptography-key-parsing v0.1.0 (C:\Users\awei006\AppData\Local\Temp\pip-install-ptzrqy6d\cryptography_dffa39c3c63c4ae4b53a322803c200d9\src\rust\cryptography-key-parsing) Compiling pyo3-build-config v0.25.0 Compiling quote v1.0.40 Compiling cryptography-openssl v0.1.0 (C:\Users\awei006\AppData\Local\Temp\pip-install-ptzrqy6d\cryptography_dffa39c3c63c4ae4b53a322803c200d9\src\rust\cryptography-openssl) Compiling base64 v0.22.1 Compiling self_cell v1.2.0 Compiling syn v2.0.101 Compiling pem v3.0.5 Compiling openssl-sys v0.9.108 Compiling cryptography-cffi v0.1.0 (C:\Users\awei006\AppData\Local\Temp\pip-install-ptzrqy6d\cryptography_dffa39c3c63c4ae4b53a322803c200d9\src\rust\cryptography-cffi) warning: openssl-sys@0.9.108: Could not find directory of OpenSSL installation, and this `-sys` crate cannot proceed without this knowledge. If OpenSSL is installed and this crate had trouble finding it, you can set the `OPENSSL_DIR` environment variable for the compilation process. See stderr section below for further information. error: failed to run custom build command for `openssl-sys v0.9.108` Caused by: process didn't exit successfully: `C:\Users\awei006\AppData\Local\Temp\pip-install-ptzrqy6d\cryptography_dffa39c3c63c4ae4b53a322803c200d9\target\release\build\openssl-sys-81bfb0a89f2ad101\build-script-main` (exit code: 101) --- stdout cargo:rustc-check-cfg=cfg(osslconf, values("OPENSSL_NO_OCB", "OPENSSL_NO_SM4", "OPENSSL_NO_SEED", "OPENSSL_NO_CHACHA", "OPENSSL_NO_CAST", "OPENSSL_NO_IDEA", "OPENSSL_NO_CAMELLIA", "OPENSSL_NO_RC4", "OPENSSL_NO_BF", "OPENSSL_NO_PSK", "OPENSSL_NO_DEPRECATED_3_0", "OPENSSL_NO_SCRYPT", "OPENSSL_NO_SM3", "OPENSSL_NO_RMD160", "OPENSSL_NO_EC2M", "OPENSSL_NO_OCSP", "OPENSSL_NO_CMS", "OPENSSL_NO_COMP", "OPENSSL_NO_SOCK", "OPENSSL_NO_STDIO", "OPENSSL_NO_EC", "OPENSSL_NO_SSL3_METHOD", "OPENSSL_NO_KRB5", "OPENSSL_NO_TLSEXT", "OPENSSL_NO_SRP", "OPENSSL_NO_RFC3779", "OPENSSL_NO_SHA", "OPENSSL_NO_NEXTPROTONEG", "OPENSSL_NO_ENGINE", "OPENSSL_NO_BUF_FREELISTS", "OPENSSL_NO_RC2")) cargo:rustc-check-cfg=cfg(openssl) cargo:rustc-check-cfg=cfg(libressl) cargo:rustc-check-cfg=cfg(boringssl) cargo:rustc-check-cfg=cfg(awslc) cargo:rustc-check-cfg=cfg(libressl250) cargo:rustc-check-cfg=cfg(libressl251) cargo:rustc-check-cfg=cfg(libressl252) cargo:rustc-check-cfg=cfg(libressl261) cargo:rustc-check-cfg=cfg(libressl270) cargo:rustc-check-cfg=cfg(libressl271) cargo:rustc-check-cfg=cfg(libressl273) cargo:rustc-check-cfg=cfg(libressl280) cargo:rustc-check-cfg=cfg(libressl281) cargo:rustc-check-cfg=cfg(libressl291) cargo:rustc-check-cfg=cfg(libressl310) cargo:rustc-check-cfg=cfg(libressl321) cargo:rustc-check-cfg=cfg(libressl332) cargo:rustc-check-cfg=cfg(libressl340) cargo:rustc-check-cfg=cfg(libressl350) cargo:rustc-check-cfg=cfg(libressl360) cargo:rustc-check-cfg=cfg(libressl361) cargo:rustc-check-cfg=cfg(libressl370) cargo:rustc-check-cfg=cfg(libressl380) cargo:rustc-check-cfg=cfg(libressl381) cargo:rustc-check-cfg=cfg(libressl382) cargo:rustc-check-cfg=cfg(libressl390) cargo:rustc-check-cfg=cfg(libressl400) cargo:rustc-check-cfg=cfg(libressl410) cargo:rustc-check-cfg=cfg(ossl101) cargo:rustc-check-cfg=cfg(ossl102) cargo:rustc-check-cfg=cfg(ossl102f) cargo:rustc-check-cfg=cfg(ossl102h) cargo:rustc-check-cfg=cfg(ossl110) cargo:rustc-check-cfg=cfg(ossl110f) cargo:rustc-check-cfg=cfg(ossl110g) cargo:rustc-check-cfg=cfg(ossl110h) cargo:rustc-check-cfg=cfg(ossl111) cargo:rustc-check-cfg=cfg(ossl111b) cargo:rustc-check-cfg=cfg(ossl111c) cargo:rustc-check-cfg=cfg(ossl111d) cargo:rustc-check-cfg=cfg(ossl300) cargo:rustc-check-cfg=cfg(ossl310) cargo:rustc-check-cfg=cfg(ossl320) cargo:rustc-check-cfg=cfg(ossl330) cargo:rustc-check-cfg=cfg(ossl340) cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_GNU_OPENSSL_LIB_DIR X86_64_PC_WINDOWS_GNU_OPENSSL_LIB_DIR unset cargo:rerun-if-env-changed=OPENSSL_LIB_DIR OPENSSL_LIB_DIR unset cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_GNU_OPENSSL_INCLUDE_DIR X86_64_PC_WINDOWS_GNU_OPENSSL_INCLUDE_DIR unset cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR OPENSSL_INCLUDE_DIR unset cargo:rerun-if-env-changed=X86_64_PC_WINDOWS_GNU_OPENSSL_DIR X86_64_PC_WINDOWS_GNU_OPENSSL_DIR unset cargo:rerun-if-env-changed=OPENSSL_DIR OPENSSL_DIR unset cargo:rerun-if-env-changed=OPENSSL_NO_PKG_CONFIG cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-pc-windows-gnu cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_pc_windows_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG cargo:rerun-if-env-changed=PKG_CONFIG cargo:rerun-if-env-changed=OPENSSL_STATIC cargo:rerun-if-env-changed=OPENSSL_DYNAMIC cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-pc-windows-gnu cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_pc_windows_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH cargo:rerun-if-env-changed=PKG_CONFIG_PATH cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-pc-windows-gnu cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_pc_windows_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-pc-windows-gnu cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_pc_windows_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR cargo:rerun-if-env-changed=OPENSSL_STATIC cargo:rerun-if-env-changed=OPENSSL_DYNAMIC cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-pc-windows-gnu cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_pc_windows_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH cargo:rerun-if-env-changed=PKG_CONFIG_PATH cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-pc-windows-gnu cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_pc_windows_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-pc-windows-gnu cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_pc_windows_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR Could not find openssl via pkg-config: Could not run `PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 pkg-config --libs --cflags openssl` The pkg-config command could not be found. Most likely, you need to install a pkg-config package for your OS. If you've already installed it, ensure the pkg-config command is one of the directories in the PATH environment variable. If you did not expect this build to link to a pre-installed system library, then check documentation of the openssl-sys crate for an option to build the library from source, or disable features or dependencies that require pkg-config. note: vcpkg did not find openssl: the vcpkg-rs Vcpkg build helper can only find libraries built for the MSVC ABI. cargo:warning=Could not find directory of OpenSSL installation, and this `-sys` crate cannot proceed without this knowledge. If OpenSSL is installed and this crate had trouble finding it, you can set the `OPENSSL_DIR` environment variable for the compilation process. See stderr section below for further information. --- stderr Could not find directory of OpenSSL installation, and this `-sys` crate cannot proceed without this knowledge. If OpenSSL is installed and this crate had trouble finding it, you can set the `OPENSSL_DIR` environment variable for the compilation process. Make sure you also have the development packages of openssl installed. For example, `libssl-dev` on Ubuntu or `openssl-devel` on Fedora. If you're in a situation where you think the directory *should* be found automatically, please open a bug at https://github.com/sfackler/rust-openssl and include information about your system as well as this message. $HOST = x86_64-pc-windows-gnu $TARGET = x86_64-pc-windows-gnu openssl-sys = 0.9.108 It looks like you're compiling for MinGW but you may not have either OpenSSL or pkg-config installed. You can install these two dependencies with: pacman -S openssl-devel pkgconf and try building this crate again. warning: build failed, waiting for other jobs to finish... 馃挜 maturin failed Caused by: Failed to build a native library through cargo Caused by: Cargo build finished with "exit code: 101": `"cargo" "rustc" "--message-format" "json-render-diagnostics" "--locked" "--manifest-path" "C:\\Users\\awei006\\AppData\\Local\\Temp\\pip-install-ptzrqy6d\\cryptography_dffa39c3c63c4ae4b53a322803c200d9\\src\\rust\\Cargo.toml" "--release" "--lib"` Error: command ['maturin', 'pep517', 'build-wheel', '-i', 'D:\\Desktop\\乐骐编程\\python 3.13.5\\python3.13t.exe', '--compatibility', 'off'] returned non-zero exit status 1 [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for cryptography Failed to build cryptography error: failed-wheel-build-for-install × Failed to build installable wheels for some pyproject.toml based projects ╰─> cryptography
最新发布
08-29
<think>我们正在处理用户的问题:在安装Python的cryptography包时遇到OpenSSL编译错误,具体是openssl-sys无法找到OpenSSL安装目录,导致mingw编译失败。根据用户提供的引用,以及我们之前关于安装Rust工具链的讨论,我们可以整合解决方案。 引用[1]中提到安装OpenCV时设置环境变量的方法,我们可以借鉴来设置OpenSSL的环境变量。引用[3]和[4]列出了在Linux系统上安装Python编译所需的依赖,但用户的问题是在Windows上,并且之前我们建议使用MinGW(GNU工具链)来避免Visual Studio的依赖。 然而,用户现在遇到的问题是cryptography包在编译时找不到OpenSSL。cryptography包依赖于一个Rust的OpenSSL绑定(openssl-sys),它需要预先安装OpenSSL开发库。 因此,我们需要在Windows上安装OpenSSL开发库,并确保其路径被正确设置。 步骤: 1. 安装OpenSSL for Windows 我们可以从OpenSSL的官方网站下载预编译的Windows版本。由于用户使用的是MinGW,我们应选择与MinGW兼容的版本(例如,由Shining Light提供的版本:https://slproweb.com/products/Win32OpenSSL.html)。 注意:根据系统架构(32位或64位)选择合适的版本。如果用户使用的是64位系统,则下载Win64 OpenSSL。同时,确保下载的版本是“Light”版本(仅包含库文件)还是完整版(包含开发文件),我们需要开发文件(包含头文件和库文件)。因此,建议下载非Light版本(例如,Win64 OpenSSL v1.1.1x EXE)。 2. 运行安装程序 运行下载的安装程序,并记住安装路径(默认路径为`C:\OpenSSL-Win64`)。 3. 设置环境变量 我们需要设置两个环境变量: - `OPENSSL_DIR`:指向OpenSSL的安装目录(例如,`C:\OpenSSL-Win64`) -OpenSSL的bin目录(例如,`C:\OpenSSL-Win64\bin`)添加到系统的PATH环境变量中,以便运行时能够找到dll。 以管理员身份打开命令提示符,使用以下命令设置环境变量(永久生效): ```cmd setx /m OPENSSL_DIR "C:\OpenSSL-Win64" setx /m PATH "%PATH%;C:\OpenSSL-Win64\bin" ``` 注意:设置PATH后需要重启终端(或者重启所有需要用到新环境变量的程序)。 4. 安装必要的工具 确保已经安装了Rust工具链(使用GNU版本)和MinGW。如果之前没有安装MinGW,可以使用以下命令安装(使用Chocolatey包管理器): ```powershell choco install mingw -y ``` 然后,将MinGW的bin目录(例如,`C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin`)添加到PATH环境变量中。 5. 重新安装cryptography 在确保环境变量设置正确后,尝试重新安装cryptography: ```powershell pip install cryptography --no-cache-dir --force-reinstall ``` 6. 如果仍然失败,可以尝试设置编译时的链接库 在编译时,我们可以通过设置特定的环境变量来帮助openssl-sys找到OpenSSL。在Rust中,openssl-sys会查找`OPENSSL_DIR`环境变量。此外,我们还可以设置`OPENSSL_LIB_DIR`和`OPENSSL_INCLUDE_DIR`来分别指定库文件和头文件的位置。 例如,在安装OpenSSL后,如果头文件在`C:\OpenSSL-Win64\include`,库文件在`C:\OpenSSL-Win64\lib`,我们可以设置: ```powershell $env:OPENSSL_DIR = "C:\OpenSSL-Win64" $env:OPENSSL_LIB_DIR = "C:\OpenSSL-Win64\lib" $env:OPENSSL_INCLUDE_DIR = "C:\OpenSSL-Win64\include" ``` 然后运行pip安装命令。 7. 如果用户使用的是MSVC工具链,则可能需要安装Visual Studio构建工具。但之前我们建议使用GNU工具链,所以这里我们假设用户使用的是GNU工具链。 8. 引用[2]中提到,可以使用后量子密码库,但这不是当前问题的重点。 总结:用户需要安装OpenSSL开发库,并设置正确的环境变量,以便在编译cryptography时能够找到OpenSSL。 注意:由于用户之前已经安装了Rust工具链(GNU版本),并且我们正在使用MinGW,所以我们需要确保OpenSSL的库是适用于MinGW的(即使用MinGW编译的OpenSSL)。从Shining Light下载的OpenSSL通常提供两种版本:一种使用Visual Studio编译(适用于MSVC),另一种使用MinGW编译。但该网站提供的预编译版本通常是使用Visual Studio编译的。因此,如果使用GNU工具链,可能需要自己编译OpenSSL或者寻找MinGW版本的预编译包。 替代方案:如果找不到MinGW版本的OpenSSL预编译包,我们可以考虑使用vcpkg来安装OpenSSL(它会根据当前激活的工具链编译OpenSSL)。但这样会复杂一些。 为了简化,我们可以尝试使用MSVC工具链来编译cryptography(因为OpenSSL的预编译版本大多是MSVC的)。如果用户愿意切换工具链,可以执行: ```powershell rustup default stable-x86_64-pc-windows-msvc ``` 然后重新安装cryptography。但这样需要安装Visual Studio构建工具(包括C++构建工具)。 考虑到用户可能不想安装庞大的Visual Studio,我们继续坚持使用GNU工具链。因此,我们需要一个MinGW版本的OpenSSL。 另一个选择是使用cryptography提供的预编译轮子(wheel)。如果用户的环境与预编译轮子兼容,则无需编译。我们可以尝试升级pip并指定使用预编译版本: ```powershell pip install --upgrade pip pip install cryptography --only-binary cryptography ``` 但是,如果用户的环境(如Python版本、系统架构)没有对应的预编译轮子,则可能失败。 因此,我们优先尝试设置OpenSSL环境变量,并使用MinGW编译。如果不行,再尝试使用预编译轮子。 步骤总结: 1. 安装OpenSSL(选择Win64版本,安装到C:\OpenSSL-Win64) 2. 设置环境变量(OPENSSL_DIR和PATH) 3. 确保MinGW已安装并添加到PATH 4. 重新安装cryptography(如果失败则尝试使用预编译轮子) 如果用户已经安装了Visual Studio构建工具(或者愿意安装),可以切换到MSVC工具链。 由于问题复杂,我们提供分步指导。 注意:用户之前已经安装了Rust(GNU工具链),所以我们优先尝试MinGW方案。 如果用户遇到链接错误,可能是由于OpenSSL库的架构不匹配(例如,用户安装的是32位的OpenSSL,但系统是64位)或者OpenSSL版本不兼容(cryptography要求特定版本的OpenSSL)。 最后,如果所有方法都失败,可以考虑使用Docker容器来避免本地编译。 现在,我们按照步骤写出解决方案。</think>### 解决 Python cryptography 安装时 OpenSSL 编译错误的方法 根据您遇到的 `openssl-sys` 编译错误和引用[1][3][4]的依赖提示,以下是完整的解决方案: #### 1. **安装 OpenSSL 开发库** ```powershell # 使用 Chocolatey 安装 OpenSSL(引用[1]) choco install openssl -y --params='/ADD_PATH' ``` #### 2. **设置 OpenSSL 环境变量** ```powershell # 设置 OpenSSL 目录(替换为实际路径) setx /m OPENSSL_DIR "C:\Program Files\OpenSSL-Win64" setx /m OPENSSL_LIB_DIR "C:\Program Files\OpenSSL-Win64\lib" ``` #### 3. **安装 MinGW 编译工具链** ```powershell # 安装 MinGW 和基础编译工具(引用[1][3][4]) choco install mingw -y choco install make -y ``` #### 4. **安装 Python 编译依赖** ```powershell # 安装 cryptography 的编译依赖(引用[3][4]) pip install wheel setuptools-rust pip install --upgrade pip ``` #### 5. **设置 Rust 编译目标** ```powershell # 强制使用 GNU 工具链(避免 MSVC 问题) setx CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER "x86_64-w64-mingw32-gcc" setx CARGO_BUILD_TARGET "x86_64-pc-windows-gnu" ``` #### 6. **重新安装 cryptography** ```powershell # 使用源码编译安装 pip install cryptography --no-binary cryptography -v ``` --- ### 关键问题分析 1. **为什么需要 OpenSSL 开发库?** cryptography 依赖 Rust 的 `openssl-sys` 包,该包需要: - OpenSSL 头文件(`.h`) - 静态库文件(`.a` 或 `.lib`) - 动态链接库(`.dll`) 环境变量 `OPENSSL_DIR` 帮助构建系统定位这些文件[^1] 2. **MinGW 的作用** Windows 下 GNU 工具链需要 MinGW 提供: - GCC 编译器 - GNU 链接器 (ld) - POSIX 兼容层 这是替代 MSVC 编译链的轻量方案(引用[1]) 3. **环境变量详解** ```env OPENSSL_DIR = C:\Program Files\OpenSSL-Win64 ├── include/ # 头文件目录 └── lib/ # 库文件目录 CARGO_BUILD_TARGET = x86_64-pc-windows-gnu # 指定GNU工具链 ``` --- ### 验证安装成功 ```python import cryptography from cryptography.hazmat.backends.openssl.backend import backend print("OpenSSL 版本:", backend.openssl_version_text()) # 应输出类似 OpenSSL 3.0.12 24 Oct 2023 ``` > **注意**:如果仍失败,尝试手动编译: > ```powershell > git clone https://github.com/pyca/cryptography > cd cryptography > cargo build --release --target x86_64-pc-windows-gnu > pip install . > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值