Loading... 我在像树莓派这样的arm64平台上安装openjtalk时,用pip安装总是会出一些玄学问题,最后使用源码构建的方式安装解决了问题。同时我也提供我构建出的whl,不想手动构建也可以使用我构建的whl。 **使用方法:** ``` pip install openjtalk==0.3.0.dev2 --index-url https://pypi.artrajz.cn/simple ``` 下面以树莓派4b为例,介绍如何从源码构建whl,其他平台同理。(其实其他平台直接安装应该不会出问题吧) ## 下载源码和修改版本号 以`openjtalk-0.3.0.dev2`为例,首先下载[openjtalk-0.3.0.dev2](https://files.pythonhosted.org/packages/15/15/fb29ebea31d9b0fbe72b8547c9221dda17df8e23e3b4f2eb326eec07966a/openjtalk-0.3.0.dev3.tar.gz)源码,可以在[pypi](https://pypi.org/project/openjtalk/#files)找到 不知道为什么源码里的版本号是0.3.0,安装之后虽然是可以用的,但是版本号不对下次用pip安装时无法正确检测版本号。所以安装前需要先修改一下源码里的版本号,在setup.py`的第29行 ``` version = "0.3.0.dev2" ``` ## 安装必要的依赖和cmake ### pip安装依赖 ``` pip install numpy==1.23.3 six==1.16.0 cython==0.29.34 ``` ### 安装cmake #### linux ``` apt install cmake ``` #### windows cmake官网下载安装[cmake-3.26.4-windows-x86_64.msi](https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-windows-x86_64.msi) ## 源码存在的问题 下一步构建whl`时,发现`openjtalk-0.3.0.dev2`源码里有点问题,会提示`FileExistsError: [Errno 17] File exists:./pyopenjtalk/open_jtalk_dic_utf_8-1.11` 。`openjtalk-0.3.0.dev3`中用`try`语句包裹了反而没有这个问题。 有两种方法解决 **1.每次构建前删除这个文件** ``` rm -rf ./pyopenjtalk/open_jtalk_dic_utf_8-1.11 ``` **2.修改源码**`setup.py`第183行,加上`dirs_exist_ok=True`,意思是如果文件夹存在则不继续复制 ``` shutil.copytree(f"./{_dict_folder_name}", f"./pyopenjtalk/{_dict_folder_name}", dirs_exist_ok=True) ``` ## 开始构建 ``` python setup.py bdist_wheel ``` **不出意外的话,构建完后在**`dist`文件夹中就可以找到刚刚构建出的`whl`文件`openjtalk-0.3.0.dev2-cp310-cp310-linux_aarch64.whl` ## 安装whl ``` cd dist pip install openjtalk-0.3.0.dev2-cp310-cp310-linux_aarch64.whl ``` # 遇到的问题 ## 版本号会自动加上一个哈希值 尝试构建pyopenjtalk时,版本号总是会自动加上一个哈希值,但它不管是什么是版本每次又是固定的。 **解决办法是,在构建之前指定版本号** ``` set PYOPENJTALK_BUILD_VERSION=0.3.3 python setup.py bdist_wheel ``` 或者 ``` PYOPENJTALK_BUILD_VERSION=0.3.3 python setup.py bdist_whee ``` ## 忽略换行符 一直报C2001有换行符的报错,超过100个就自动停止了 **解决办法** ``` set CL=/utf-8 python setup.py bdist_wheel ``` Last modification:November 8, 2023 © Allow specification reprint Support Appreciate the author WeChat Like 0 如果觉得我的文章对你有用,请随意赞赏
One comment
真棒!