Committed by
GitHub
Install binaries via pip install (#112)
When pepole use pip install sherpa-onnx, they also get the following binaries: (py38) fangjuns-MacBook-Pro:bin fangjun$ ls -lh sherpa-onnx* -rwxr-xr-x 1 fangjun staff 36K Apr 4 13:48 sherpa-onnx -rwxr-xr-x 1 fangjun staff 52K Apr 4 13:48 sherpa-onnx-microphone -rwxr-xr-x 1 fangjun staff 54K Apr 4 13:48 sherpa-onnx-microphone-offline -rwxr-xr-x 1 fangjun staff 37K Apr 4 13:48 sherpa-onnx-offline -rwxr-xr-x 1 fangjun staff 634K Apr 4 13:48 sherpa-onnx-offline-websocket-server -rwxr-xr-x 1 fangjun staff 710K Apr 4 13:48 sherpa-onnx-online-websocket-client -rwxr-xr-x 1 fangjun staff 651K Apr 4 13:48 sherpa-onnx-online-websocket-server (py38) fangjuns-MacBook-Pro:bin fangjun$ pwd /Users/fangjun/py38/bin
正在显示
6 个修改的文件
包含
140 行增加
和
8 行删除
| @@ -34,6 +34,8 @@ jobs: | @@ -34,6 +34,8 @@ jobs: | ||
| 34 | CIBW_BEFORE_BUILD: "pip install -U cmake numpy" | 34 | CIBW_BEFORE_BUILD: "pip install -U cmake numpy" |
| 35 | CIBW_SKIP: "cp27-* cp35-* cp36-* *-win32 pp* *-musllinux* *-manylinux_i686" | 35 | CIBW_SKIP: "cp27-* cp35-* cp36-* *-win32 pp* *-musllinux* *-manylinux_i686" |
| 36 | CIBW_BUILD_VERBOSITY: 3 | 36 | CIBW_BUILD_VERBOSITY: 3 |
| 37 | + CIBW_ENVIRONMENT_LINUX: LD_LIBRARY_PATH='/project/build/bdist.linux-x86_64/wheel/sherpa_onnx/lib' | ||
| 38 | + CIBW_REPAIR_WHEEL_COMMAND_MACOS: "" | ||
| 37 | 39 | ||
| 38 | - name: Display wheels | 40 | - name: Display wheels |
| 39 | shell: bash | 41 | shell: bash |
| @@ -55,3 +57,16 @@ jobs: | @@ -55,3 +57,16 @@ jobs: | ||
| 55 | python3 -m pip install wheel twine setuptools | 57 | python3 -m pip install wheel twine setuptools |
| 56 | 58 | ||
| 57 | twine upload ./wheelhouse/*.whl | 59 | twine upload ./wheelhouse/*.whl |
| 60 | + | ||
| 61 | + - name: Build sdist | ||
| 62 | + shell: bash | ||
| 63 | + run: | | ||
| 64 | + python3 setup.py sdist | ||
| 65 | + ls -l dist/* | ||
| 66 | + | ||
| 67 | + - name: Publish sdist to PyPI | ||
| 68 | + env: | ||
| 69 | + TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} | ||
| 70 | + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} | ||
| 71 | + run: | | ||
| 72 | + twine upload dist/sherpa-onnx-*.tar.gz |
| @@ -5,6 +5,7 @@ | @@ -5,6 +5,7 @@ | ||
| 5 | 5 | ||
| 6 | import os | 6 | import os |
| 7 | import platform | 7 | import platform |
| 8 | +import shutil | ||
| 8 | import sys | 9 | import sys |
| 9 | from pathlib import Path | 10 | from pathlib import Path |
| 10 | 11 | ||
| @@ -59,6 +60,7 @@ class BuildExtension(build_ext): | @@ -59,6 +60,7 @@ class BuildExtension(build_ext): | ||
| 59 | # build/lib.linux-x86_64-3.8 | 60 | # build/lib.linux-x86_64-3.8 |
| 60 | os.makedirs(self.build_lib, exist_ok=True) | 61 | os.makedirs(self.build_lib, exist_ok=True) |
| 61 | 62 | ||
| 63 | + out_bin_dir = Path(self.build_lib).parent / "sherpa_onnx" / "bin" | ||
| 62 | install_dir = Path(self.build_lib).resolve() / "sherpa_onnx" | 64 | install_dir = Path(self.build_lib).resolve() / "sherpa_onnx" |
| 63 | 65 | ||
| 64 | sherpa_onnx_dir = Path(__file__).parent.parent.resolve() | 66 | sherpa_onnx_dir = Path(__file__).parent.parent.resolve() |
| @@ -75,9 +77,9 @@ class BuildExtension(build_ext): | @@ -75,9 +77,9 @@ class BuildExtension(build_ext): | ||
| 75 | 77 | ||
| 76 | extra_cmake_args += " -DSHERPA_ONNX_ENABLE_CHECK=OFF " | 78 | extra_cmake_args += " -DSHERPA_ONNX_ENABLE_CHECK=OFF " |
| 77 | extra_cmake_args += " -DSHERPA_ONNX_ENABLE_PYTHON=ON " | 79 | extra_cmake_args += " -DSHERPA_ONNX_ENABLE_PYTHON=ON " |
| 78 | - extra_cmake_args += " -DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF " | 80 | + extra_cmake_args += " -DSHERPA_ONNX_ENABLE_PORTAUDIO=ON " |
| 79 | extra_cmake_args += " -DSHERPA_ONNX_ENABLE_C_API=OFF " | 81 | extra_cmake_args += " -DSHERPA_ONNX_ENABLE_C_API=OFF " |
| 80 | - extra_cmake_args += " -DSHERPA_ONNX_ENABLE_WEBSOCKET=OFF " | 82 | + extra_cmake_args += " -DSHERPA_ONNX_ENABLE_WEBSOCKET=ON " |
| 81 | 83 | ||
| 82 | if "PYTHON_EXECUTABLE" not in cmake_args: | 84 | if "PYTHON_EXECUTABLE" not in cmake_args: |
| 83 | print(f"Setting PYTHON_EXECUTABLE to {sys.executable}") | 85 | print(f"Setting PYTHON_EXECUTABLE to {sys.executable}") |
| @@ -125,3 +127,21 @@ class BuildExtension(build_ext): | @@ -125,3 +127,21 @@ class BuildExtension(build_ext): | ||
| 125 | "You can ask for help by creating an issue on GitHub.\n" | 127 | "You can ask for help by creating an issue on GitHub.\n" |
| 126 | "\nClick:\n\thttps://github.com/k2-fsa/sherpa-onnx/issues/new\n" # noqa | 128 | "\nClick:\n\thttps://github.com/k2-fsa/sherpa-onnx/issues/new\n" # noqa |
| 127 | ) | 129 | ) |
| 130 | + | ||
| 131 | + suffix = ".exe" if is_windows() else "" | ||
| 132 | + # Remember to also change setup.py | ||
| 133 | + | ||
| 134 | + binaries = ["sherpa-onnx"] | ||
| 135 | + binaries += ["sherpa-onnx-offline"] | ||
| 136 | + binaries += ["sherpa-onnx-microphone"] | ||
| 137 | + binaries += ["sherpa-onnx-microphone-offline"] | ||
| 138 | + binaries += ["sherpa-onnx-online-websocket-server"] | ||
| 139 | + binaries += ["sherpa-onnx-offline-websocket-server"] | ||
| 140 | + binaries += ["sherpa-onnx-online-websocket-client"] | ||
| 141 | + | ||
| 142 | + for f in binaries: | ||
| 143 | + src_file = install_dir / "bin" / (f + suffix) | ||
| 144 | + print(f"Copying {src_file} to {out_bin_dir}/") | ||
| 145 | + shutil.copy(f"{src_file}", f"{out_bin_dir}/") | ||
| 146 | + | ||
| 147 | + shutil.rmtree(f"{install_dir}/bin") |
| @@ -149,7 +149,7 @@ function(download_onnxruntime) | @@ -149,7 +149,7 @@ function(download_onnxruntime) | ||
| 149 | if(UNIX AND NOT APPLE) | 149 | if(UNIX AND NOT APPLE) |
| 150 | file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/lib*") | 150 | file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/lib*") |
| 151 | elseif(APPLE) | 151 | elseif(APPLE) |
| 152 | - file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/lib*dylib") | 152 | + file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/libonnxruntime.*.*dylib") |
| 153 | elseif(WIN32) | 153 | elseif(WIN32) |
| 154 | file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/*.dll") | 154 | file(GLOB onnxruntime_lib_files "${onnxruntime_SOURCE_DIR}/lib/*.dll") |
| 155 | endif() | 155 | endif() |
| @@ -53,6 +53,23 @@ function(download_portaudio) | @@ -53,6 +53,23 @@ function(download_portaudio) | ||
| 53 | endif() | 53 | endif() |
| 54 | 54 | ||
| 55 | add_subdirectory(${portaudio_SOURCE_DIR} ${portaudio_BINARY_DIR} EXCLUDE_FROM_ALL) | 55 | add_subdirectory(${portaudio_SOURCE_DIR} ${portaudio_BINARY_DIR} EXCLUDE_FROM_ALL) |
| 56 | + | ||
| 57 | + if(BUILD_SHARED_LIBS) | ||
| 58 | + set_target_properties(portaudio PROPERTIES OUTPUT_NAME "sherpa-onnx-portaudio") | ||
| 59 | + | ||
| 60 | + if(SHERPA_ONNX_ENABLE_PYTHON AND WIN32) | ||
| 61 | + install(TARGETS portaudio DESTINATION ..) | ||
| 62 | + else() | ||
| 63 | + install(TARGETS portaudio DESTINATION lib) | ||
| 64 | + endif() | ||
| 65 | + else() | ||
| 66 | + set_target_properties(portaudio_static PROPERTIES OUTPUT_NAME "sherpa-onnx-portaudio_static") | ||
| 67 | + if(SHERPA_ONNX_ENABLE_PYTHON AND WIN32) | ||
| 68 | + install(TARGETS portaudio_static DESTINATION ..) | ||
| 69 | + else() | ||
| 70 | + install(TARGETS portaudio_static DESTINATION lib) | ||
| 71 | + endif() | ||
| 72 | + endif() | ||
| 56 | endfunction() | 73 | endfunction() |
| 57 | 74 | ||
| 58 | download_portaudio() | 75 | download_portaudio() |
| @@ -39,6 +39,28 @@ install_requires = [ | @@ -39,6 +39,28 @@ install_requires = [ | ||
| 39 | "numpy", | 39 | "numpy", |
| 40 | ] | 40 | ] |
| 41 | 41 | ||
| 42 | + | ||
| 43 | +def get_binaries_to_install(): | ||
| 44 | + bin_dir = Path("build") / "sherpa_onnx" / "bin" | ||
| 45 | + bin_dir.mkdir(parents=True, exist_ok=True) | ||
| 46 | + suffix = ".exe" if is_windows() else "" | ||
| 47 | + | ||
| 48 | + # Remember to also change cmake/cmake_extension.py | ||
| 49 | + binaries = ["sherpa-onnx"] | ||
| 50 | + binaries += ["sherpa-onnx-offline"] | ||
| 51 | + binaries += ["sherpa-onnx-microphone"] | ||
| 52 | + binaries += ["sherpa-onnx-microphone-offline"] | ||
| 53 | + binaries += ["sherpa-onnx-online-websocket-server"] | ||
| 54 | + binaries += ["sherpa-onnx-offline-websocket-server"] | ||
| 55 | + binaries += ["sherpa-onnx-online-websocket-client"] | ||
| 56 | + | ||
| 57 | + exe = [] | ||
| 58 | + for f in binaries: | ||
| 59 | + t = bin_dir / (f + suffix) | ||
| 60 | + exe.append(str(t)) | ||
| 61 | + return exe | ||
| 62 | + | ||
| 63 | + | ||
| 42 | setuptools.setup( | 64 | setuptools.setup( |
| 43 | name=package_name, | 65 | name=package_name, |
| 44 | python_requires=">=3.6", | 66 | python_requires=">=3.6", |
| @@ -50,6 +72,7 @@ setuptools.setup( | @@ -50,6 +72,7 @@ setuptools.setup( | ||
| 50 | "sherpa_onnx": "sherpa-onnx/python/sherpa_onnx", | 72 | "sherpa_onnx": "sherpa-onnx/python/sherpa_onnx", |
| 51 | }, | 73 | }, |
| 52 | packages=["sherpa_onnx"], | 74 | packages=["sherpa_onnx"], |
| 75 | + data_files=[("bin", get_binaries_to_install())], | ||
| 53 | url="https://github.com/k2-fsa/sherpa-onnx", | 76 | url="https://github.com/k2-fsa/sherpa-onnx", |
| 54 | long_description=read_long_description(), | 77 | long_description=read_long_description(), |
| 55 | long_description_content_type="text/markdown", | 78 | long_description_content_type="text/markdown", |
| 1 | include_directories(${CMAKE_SOURCE_DIR}) | 1 | include_directories(${CMAKE_SOURCE_DIR}) |
| 2 | 2 | ||
| 3 | +if(SHERPA_ONNX_ENABLE_PYTHON) | ||
| 4 | + message(STATUS "PYTHON_EXECUTABLE: ${PYTHON_EXECUTABLE}") | ||
| 5 | + execute_process( | ||
| 6 | + COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; print('.'.join(sys.version.split('.')[:2]))" | ||
| 7 | + OUTPUT_STRIP_TRAILING_WHITESPACE | ||
| 8 | + OUTPUT_VARIABLE PYTHON_VERSION | ||
| 9 | + ) | ||
| 10 | + message(STATUS "PYTHON_VERSION: ${PYTHON_VERSION}") | ||
| 11 | +endif() | ||
| 12 | + | ||
| 3 | set(sources | 13 | set(sources |
| 4 | cat.cc | 14 | cat.cc |
| 5 | endpoint.cc | 15 | endpoint.cc |
| @@ -72,7 +82,15 @@ target_link_libraries(sherpa-onnx sherpa-onnx-core) | @@ -72,7 +82,15 @@ target_link_libraries(sherpa-onnx sherpa-onnx-core) | ||
| 72 | target_link_libraries(sherpa-onnx-offline sherpa-onnx-core) | 82 | target_link_libraries(sherpa-onnx-offline sherpa-onnx-core) |
| 73 | if(NOT WIN32) | 83 | if(NOT WIN32) |
| 74 | target_link_libraries(sherpa-onnx "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib") | 84 | target_link_libraries(sherpa-onnx "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib") |
| 85 | + target_link_libraries(sherpa-onnx "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../../../sherpa_onnx/lib") | ||
| 86 | + | ||
| 75 | target_link_libraries(sherpa-onnx-offline "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib") | 87 | target_link_libraries(sherpa-onnx-offline "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib") |
| 88 | + target_link_libraries(sherpa-onnx-offline "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../../../sherpa_onnx/lib") | ||
| 89 | + | ||
| 90 | + if(SHERPA_ONNX_ENABLE_PYTHON) | ||
| 91 | + target_link_libraries(sherpa-onnx "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib/python${PYTHON_VERSION}/site-packages/sherpa_onnx/lib") | ||
| 92 | + target_link_libraries(sherpa-onnx-offline "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib/python${PYTHON_VERSION}/site-packages/sherpa_onnx/lib") | ||
| 93 | + endif() | ||
| 76 | endif() | 94 | endif() |
| 77 | 95 | ||
| 78 | if(SHERPA_ONNX_ENABLE_PYTHON AND WIN32) | 96 | if(SHERPA_ONNX_ENABLE_PYTHON AND WIN32) |
| @@ -91,12 +109,12 @@ install( | @@ -91,12 +109,12 @@ install( | ||
| 91 | 109 | ||
| 92 | if(SHERPA_ONNX_HAS_ALSA) | 110 | if(SHERPA_ONNX_HAS_ALSA) |
| 93 | add_executable(sherpa-onnx-alsa sherpa-onnx-alsa.cc alsa.cc) | 111 | add_executable(sherpa-onnx-alsa sherpa-onnx-alsa.cc alsa.cc) |
| 94 | - target_link_libraries(sherpa-onnx-alsa PRIVATE sherpa-onnx-core) | 112 | + target_link_libraries(sherpa-onnx-alsa sherpa-onnx-core) |
| 95 | 113 | ||
| 96 | if(DEFINED ENV{SHERPA_ONNX_ALSA_LIB_DIR}) | 114 | if(DEFINED ENV{SHERPA_ONNX_ALSA_LIB_DIR}) |
| 97 | - target_link_libraries(sherpa-onnx-alsa PRIVATE -L$ENV{SHERPA_ONNX_ALSA_LIB_DIR} -lasound) | 115 | + target_link_libraries(sherpa-onnx-alsa -L$ENV{SHERPA_ONNX_ALSA_LIB_DIR} -lasound) |
| 98 | else() | 116 | else() |
| 99 | - target_link_libraries(sherpa-onnx-alsa PRIVATE asound) | 117 | + target_link_libraries(sherpa-onnx-alsa asound) |
| 100 | endif() | 118 | endif() |
| 101 | install(TARGETS sherpa-onnx-alsa DESTINATION bin) | 119 | install(TARGETS sherpa-onnx-alsa DESTINATION bin) |
| 102 | endif() | 120 | endif() |
| @@ -118,8 +136,21 @@ if(SHERPA_ONNX_ENABLE_PORTAUDIO) | @@ -118,8 +136,21 @@ if(SHERPA_ONNX_ENABLE_PORTAUDIO) | ||
| 118 | set(PA_LIB portaudio_static) | 136 | set(PA_LIB portaudio_static) |
| 119 | endif() | 137 | endif() |
| 120 | 138 | ||
| 121 | - target_link_libraries(sherpa-onnx-microphone PRIVATE ${PA_LIB} sherpa-onnx-core) | ||
| 122 | - target_link_libraries(sherpa-onnx-microphone-offline PRIVATE ${PA_LIB} sherpa-onnx-core) | 139 | + target_link_libraries(sherpa-onnx-microphone ${PA_LIB} sherpa-onnx-core) |
| 140 | + target_link_libraries(sherpa-onnx-microphone-offline ${PA_LIB} sherpa-onnx-core) | ||
| 141 | + | ||
| 142 | + if(NOT WIN32) | ||
| 143 | + target_link_libraries(sherpa-onnx-microphone "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib") | ||
| 144 | + target_link_libraries(sherpa-onnx-microphone "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../../../sherpa_onnx/lib") | ||
| 145 | + | ||
| 146 | + target_link_libraries(sherpa-onnx-microphone-offline "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib") | ||
| 147 | + target_link_libraries(sherpa-onnx-microphone-offline "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../../../sherpa_onnx/lib") | ||
| 148 | + | ||
| 149 | + if(SHERPA_ONNX_ENABLE_PYTHON) | ||
| 150 | + target_link_libraries(sherpa-onnx-microphone "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib/python${PYTHON_VERSION}/site-packages/sherpa_onnx/lib") | ||
| 151 | + target_link_libraries(sherpa-onnx-microphone-offline "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib/python${PYTHON_VERSION}/site-packages/sherpa_onnx/lib") | ||
| 152 | + endif() | ||
| 153 | + endif() | ||
| 123 | 154 | ||
| 124 | install( | 155 | install( |
| 125 | TARGETS | 156 | TARGETS |
| @@ -164,6 +195,32 @@ if(SHERPA_ONNX_ENABLE_WEBSOCKET) | @@ -164,6 +195,32 @@ if(SHERPA_ONNX_ENABLE_WEBSOCKET) | ||
| 164 | target_link_libraries(sherpa-onnx-offline-websocket-server -pthread) | 195 | target_link_libraries(sherpa-onnx-offline-websocket-server -pthread) |
| 165 | target_compile_options(sherpa-onnx-offline-websocket-server PRIVATE -Wno-deprecated-declarations) | 196 | target_compile_options(sherpa-onnx-offline-websocket-server PRIVATE -Wno-deprecated-declarations) |
| 166 | endif() | 197 | endif() |
| 198 | + | ||
| 199 | + if(NOT WIN32) | ||
| 200 | + target_link_libraries(sherpa-onnx-online-websocket-server "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib") | ||
| 201 | + target_link_libraries(sherpa-onnx-online-websocket-server "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../../../sherpa_onnx/lib") | ||
| 202 | + | ||
| 203 | + target_link_libraries(sherpa-onnx-online-websocket-client "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib") | ||
| 204 | + target_link_libraries(sherpa-onnx-online-websocket-client "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../../../sherpa_onnx/lib") | ||
| 205 | + | ||
| 206 | + target_link_libraries(sherpa-onnx-offline-websocket-server "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib") | ||
| 207 | + target_link_libraries(sherpa-onnx-offline-websocket-server "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../../../sherpa_onnx/lib") | ||
| 208 | + | ||
| 209 | + if(SHERPA_ONNX_ENABLE_PYTHON) | ||
| 210 | + target_link_libraries(sherpa-onnx-online-websocket-server "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib/python${PYTHON_VERSION}/site-packages/sherpa_onnx/lib") | ||
| 211 | + target_link_libraries(sherpa-onnx-online-websocket-client "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib/python${PYTHON_VERSION}/site-packages/sherpa_onnx/lib") | ||
| 212 | + target_link_libraries(sherpa-onnx-offline-websocket-server "-Wl,-rpath,${SHERPA_ONNX_RPATH_ORIGIN}/../lib/python${PYTHON_VERSION}/site-packages/sherpa_onnx/lib") | ||
| 213 | + endif() | ||
| 214 | + endif() | ||
| 215 | + | ||
| 216 | + install( | ||
| 217 | + TARGETS | ||
| 218 | + sherpa-onnx-online-websocket-server | ||
| 219 | + sherpa-onnx-online-websocket-client | ||
| 220 | + sherpa-onnx-offline-websocket-server | ||
| 221 | + DESTINATION | ||
| 222 | + bin | ||
| 223 | + ) | ||
| 167 | endif() | 224 | endif() |
| 168 | 225 | ||
| 169 | 226 |
-
请 注册 或 登录 后发表评论