mirror of
https://github.com/PaddlePaddle/FastDeploy.git
synced 2025-10-05 16:48:03 +08:00
support build cpu/gpu package (#75)
* support build cpu/gpu package * remove useless modification
This commit is contained in:
@@ -224,7 +224,9 @@ if(ENABLE_TEXT)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
configure_file(${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/core/config.h.in ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/core/config.h)
|
configure_file(${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/core/config.h.in ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/core/config.h)
|
||||||
|
configure_file(${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/pybind/main.cc.in ${PROJECT_SOURCE_DIR}/${CSRCS_DIR_NAME}/fastdeploy/pybind/main.cc)
|
||||||
configure_file(${PROJECT_SOURCE_DIR}/FastDeploy.cmake.in ${PROJECT_SOURCE_DIR}/FastDeploy.cmake @ONLY)
|
configure_file(${PROJECT_SOURCE_DIR}/FastDeploy.cmake.in ${PROJECT_SOURCE_DIR}/FastDeploy.cmake @ONLY)
|
||||||
|
configure_file(${PROJECT_SOURCE_DIR}/fastdeploy/c_lib_wrap.py.in ${PROJECT_SOURCE_DIR}/fastdeploy/c_lib_wrap.py)
|
||||||
|
|
||||||
list(REMOVE_ITEM ALL_DEPLOY_SRCS ${DEPLOY_PYBIND_SRCS})
|
list(REMOVE_ITEM ALL_DEPLOY_SRCS ${DEPLOY_PYBIND_SRCS})
|
||||||
|
|
||||||
|
@@ -99,7 +99,7 @@ cv::Mat PyArrayToCvMat(pybind11::array& pyarray) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PYBIND11_MODULE(fastdeploy_main, m) {
|
PYBIND11_MODULE(@PY_LIBRARY_NAME@, m) {
|
||||||
m.doc() =
|
m.doc() =
|
||||||
"Make programer easier to deploy deeplearning model, save time to save "
|
"Make programer easier to deploy deeplearning model, save time to save "
|
||||||
"the world!";
|
"the world!";
|
@@ -16,56 +16,9 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
try:
|
from .c_lib_wrap import Frontend, Backend, FDDataType, TensorInfo, Device
|
||||||
import paddle
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def add_dll_search_dir(dir_path):
|
|
||||||
os.environ["path"] = dir_path + ";" + os.environ["path"]
|
|
||||||
sys.path.insert(0, dir_path)
|
|
||||||
if sys.version_info[:2] >= (3, 8):
|
|
||||||
os.add_dll_directory(dir_path)
|
|
||||||
|
|
||||||
|
|
||||||
if os.name == "nt":
|
|
||||||
current_path = os.path.abspath(__file__)
|
|
||||||
dirname = os.path.dirname(current_path)
|
|
||||||
third_libs_dir = os.path.join(dirname, "libs")
|
|
||||||
add_dll_search_dir(third_libs_dir)
|
|
||||||
for root, dirs, filenames in os.walk(third_libs_dir):
|
|
||||||
for d in dirs:
|
|
||||||
if d == "lib" or d == "bin":
|
|
||||||
add_dll_search_dir(os.path.join(dirname, root, d))
|
|
||||||
|
|
||||||
from .fastdeploy_main import Frontend, Backend, FDDataType, TensorInfo, Device
|
|
||||||
from .runtime import Runtime, RuntimeOption
|
from .runtime import Runtime, RuntimeOption
|
||||||
from .model import FastDeployModel
|
from .model import FastDeployModel
|
||||||
from . import fastdeploy_main as C
|
from . import c_lib_wrap as C
|
||||||
from . import vision
|
from . import vision
|
||||||
from .download import download, download_and_decompress
|
from .download import download, download_and_decompress
|
||||||
|
|
||||||
|
|
||||||
def TensorInfoStr(tensor_info):
|
|
||||||
message = "TensorInfo(name : '{}', dtype : '{}', shape : '{}')".format(
|
|
||||||
tensor_info.name, tensor_info.dtype, tensor_info.shape)
|
|
||||||
return message
|
|
||||||
|
|
||||||
|
|
||||||
def RuntimeOptionStr(runtime_option):
|
|
||||||
attrs = dir(runtime_option)
|
|
||||||
message = "RuntimeOption(\n"
|
|
||||||
for attr in attrs:
|
|
||||||
if attr.startswith("__"):
|
|
||||||
continue
|
|
||||||
if hasattr(getattr(runtime_option, attr), "__call__"):
|
|
||||||
continue
|
|
||||||
message += " {} : {}\t\n".format(attr, getattr(runtime_option, attr))
|
|
||||||
message.strip("\n")
|
|
||||||
message += ")"
|
|
||||||
return message
|
|
||||||
|
|
||||||
|
|
||||||
C.TensorInfo.__repr__ = TensorInfoStr
|
|
||||||
C.RuntimeOption.__repr__ = RuntimeOptionStr
|
|
||||||
|
59
fastdeploy/c_lib_wrap.py.in
Normal file
59
fastdeploy/c_lib_wrap.py.in
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
from __future__ import absolute_import
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def add_dll_search_dir(dir_path):
|
||||||
|
os.environ["path"] = dir_path + ";" + os.environ["path"]
|
||||||
|
sys.path.insert(0, dir_path)
|
||||||
|
if sys.version_info[:2] >= (3, 8):
|
||||||
|
os.add_dll_directory(dir_path)
|
||||||
|
|
||||||
|
|
||||||
|
if os.name == "nt":
|
||||||
|
current_path = os.path.abspath(__file__)
|
||||||
|
dirname = os.path.dirname(current_path)
|
||||||
|
third_libs_dir = os.path.join(dirname, "libs")
|
||||||
|
add_dll_search_dir(third_libs_dir)
|
||||||
|
for root, dirs, filenames in os.walk(third_libs_dir):
|
||||||
|
for d in dirs:
|
||||||
|
if d == "lib" or d == "bin":
|
||||||
|
add_dll_search_dir(os.path.join(dirname, root, d))
|
||||||
|
|
||||||
|
from .@PY_LIBRARY_NAME@ import *
|
||||||
|
|
||||||
|
def TensorInfoStr(tensor_info):
|
||||||
|
message = "TensorInfo(name : '{}', dtype : '{}', shape : '{}')".format(
|
||||||
|
tensor_info.name, tensor_info.dtype, tensor_info.shape)
|
||||||
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
def RuntimeOptionStr(runtime_option):
|
||||||
|
attrs = dir(runtime_option)
|
||||||
|
message = "RuntimeOption(\n"
|
||||||
|
for attr in attrs:
|
||||||
|
if attr.startswith("__"):
|
||||||
|
continue
|
||||||
|
if hasattr(getattr(runtime_option, attr), "__call__"):
|
||||||
|
continue
|
||||||
|
message += " {} : {}\t\n".format(attr, getattr(runtime_option, attr))
|
||||||
|
message.strip("\n")
|
||||||
|
message += ")"
|
||||||
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
TensorInfo.__repr__ = TensorInfoStr
|
||||||
|
RuntimeOption.__repr__ = RuntimeOptionStr
|
@@ -13,7 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from . import fastdeploy_main as C
|
from . import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class FastDeployModel:
|
class FastDeployModel:
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from . import fastdeploy_main as C
|
from . import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class Runtime:
|
class Runtime:
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class RetinaFace(FastDeployModel):
|
class RetinaFace(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class YOLOv5Face(FastDeployModel):
|
class YOLOv5Face(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class SCRFD(FastDeployModel):
|
class SCRFD(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class UltraFace(FastDeployModel):
|
class UltraFace(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class YOLOX(FastDeployModel):
|
class YOLOX(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class YOLOv6(FastDeployModel):
|
class YOLOv6(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class Model(FastDeployModel):
|
class Model(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class PPYOLOE(FastDeployModel):
|
class PPYOLOE(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class YOLOv5Lite(FastDeployModel):
|
class YOLOv5Lite(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class Model(FastDeployModel):
|
class Model(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class NanoDetPlus(FastDeployModel):
|
class NanoDetPlus(FastDeployModel):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class YOLOv5(FastDeployModel):
|
class YOLOv5(FastDeployModel):
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
def vis_detection(im_data, det_result, line_size=1, font_size=0.5):
|
def vis_detection(im_data, det_result, line_size=1, font_size=0.5):
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import logging
|
import logging
|
||||||
from ... import FastDeployModel, Frontend
|
from ... import FastDeployModel, Frontend
|
||||||
from ... import fastdeploy_main as C
|
from ... import c_lib_wrap as C
|
||||||
|
|
||||||
|
|
||||||
class YOLOv7(FastDeployModel):
|
class YOLOv7(FastDeployModel):
|
||||||
|
230
sdk_mannager/fastdeploy/__init__.py
Normal file
230
sdk_mannager/fastdeploy/__init__.py
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
from __future__ import absolute_import
|
||||||
|
from six import text_type as _text_type
|
||||||
|
import logging
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
# Since the source code is not fully open sourced,
|
||||||
|
# currently we will provide the prebuilt library
|
||||||
|
# and demo codes
|
||||||
|
import os
|
||||||
|
|
||||||
|
__version__ = "0.1.1"
|
||||||
|
|
||||||
|
|
||||||
|
def is_installed(package_name):
|
||||||
|
import pkg_resources
|
||||||
|
try:
|
||||||
|
pkg_resources.get_distribution(package_name)
|
||||||
|
except pkg_resources.DistributionNotFound:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def get_version(package_name):
|
||||||
|
if not is_installed(package_name):
|
||||||
|
raise Exception("{} is not installed.".format(package_name))
|
||||||
|
major = pkg_resources.get_distribution(package).parsed_version.major
|
||||||
|
micro = pkg_resources.get_distribution(package).parsed_version.micro
|
||||||
|
minor = pkg_resources.get_distribution(package).parsed_version.minor
|
||||||
|
return major, micro, minor
|
||||||
|
|
||||||
|
|
||||||
|
def parse_arguments():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument(
|
||||||
|
'--model',
|
||||||
|
type=_text_type,
|
||||||
|
default=None,
|
||||||
|
help='Name of model, which can be listed by --list_models')
|
||||||
|
parser.add_argument(
|
||||||
|
'--platform',
|
||||||
|
type=_text_type,
|
||||||
|
default=None,
|
||||||
|
help='Define platform, supports Windows/Linux/Android/iOS.')
|
||||||
|
parser.add_argument(
|
||||||
|
'--soc',
|
||||||
|
type=_text_type,
|
||||||
|
default=None,
|
||||||
|
help='Define soc for the platform, supports x86/x86-NVIDIA_GPU/ARM/jetson.'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--save_dir',
|
||||||
|
type=_text_type,
|
||||||
|
default=".",
|
||||||
|
help='Path to download and extract deployment SDK.')
|
||||||
|
parser.add_argument(
|
||||||
|
'--list_models',
|
||||||
|
required=False,
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help='List all the supported models.')
|
||||||
|
parser.add_argument(
|
||||||
|
'--download_sdk',
|
||||||
|
required=False,
|
||||||
|
action="store_true",
|
||||||
|
default=False,
|
||||||
|
help='List all the supported models.')
|
||||||
|
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def read_sources():
|
||||||
|
from .download import download, download_and_decompress
|
||||||
|
user_dir = os.path.expanduser('~')
|
||||||
|
print("Updating the newest sdk information...")
|
||||||
|
source_cfgs = "https://bj.bcebos.com/paddlehub/fastdeploy/fastdeploy_newest_sources.cfg.1"
|
||||||
|
if os.path.exists(
|
||||||
|
os.path.join(user_dir, "fastdeploy_newest_sources.cfg.1")):
|
||||||
|
os.remove(os.path.join(user_dir, "fastdeploy_newest_sources.cfg.1"))
|
||||||
|
download(source_cfgs, user_dir)
|
||||||
|
categories = dict()
|
||||||
|
res = dict()
|
||||||
|
with open(os.path.join(user_dir, "fastdeploy_newest_sources.cfg.1")) as f:
|
||||||
|
for line in f:
|
||||||
|
if line.strip().startswith("#"):
|
||||||
|
continue
|
||||||
|
if line.strip() == "":
|
||||||
|
continue
|
||||||
|
category, model, plat, soc, url = line.strip().split('\t')
|
||||||
|
if category not in categories:
|
||||||
|
categories[category] = set()
|
||||||
|
categories[category].add(model)
|
||||||
|
if model not in res:
|
||||||
|
res[model] = dict()
|
||||||
|
if plat not in res[model]:
|
||||||
|
res[model][plat] = dict()
|
||||||
|
if soc not in res[model][plat]:
|
||||||
|
res[model][plat][soc] = dict()
|
||||||
|
res[model][plat][soc] = url
|
||||||
|
return categories, res
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
from .download import download, download_and_decompress
|
||||||
|
|
||||||
|
args = parse_arguments()
|
||||||
|
|
||||||
|
if not args.list_models and not args.download_sdk:
|
||||||
|
print(
|
||||||
|
"Please use flag --list_models to show all the supported models, or use flag --download_sdk to download the specify SDK to deploy you model."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
categories, all_sources = read_sources()
|
||||||
|
all_models = list(all_sources.keys())
|
||||||
|
all_models.sort()
|
||||||
|
|
||||||
|
if args.list_models:
|
||||||
|
print("Currently, FastDeploy supports {} models, list as below,\n".
|
||||||
|
format(len(all_models)))
|
||||||
|
|
||||||
|
for k, v in categories.items():
|
||||||
|
print("\nModel Category: {}".format(k))
|
||||||
|
print("_" * 100)
|
||||||
|
models = list(categories[k])
|
||||||
|
models.sort()
|
||||||
|
i = 0
|
||||||
|
while i < len(models):
|
||||||
|
if i == len(models) - 1:
|
||||||
|
print(models[i].center(30))
|
||||||
|
i += 1
|
||||||
|
elif i == len(models) - 2:
|
||||||
|
print(models[i].center(30), models[i + 1].center(30))
|
||||||
|
i += 2
|
||||||
|
else:
|
||||||
|
print(models[i].center(30), models[i + 1].center(30),
|
||||||
|
models[i + 2].center(30))
|
||||||
|
i += 3
|
||||||
|
return
|
||||||
|
|
||||||
|
if not os.path.exists(args.save_dir):
|
||||||
|
print("The specified save_dir: {} is not exist.".format(args.save_dir))
|
||||||
|
return
|
||||||
|
|
||||||
|
if args.model is None or args.model == "":
|
||||||
|
print(
|
||||||
|
"Please define --model to choose which kind of model to deploy, use --list_models to show all the supported models."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
if args.model not in all_sources:
|
||||||
|
print(
|
||||||
|
"{} is not supported, use --list_models to list all the models FastDeploy supported.".
|
||||||
|
format(args.model))
|
||||||
|
return
|
||||||
|
|
||||||
|
if args.platform is None or args.platform == "":
|
||||||
|
print(
|
||||||
|
"Please define --platform to choose which platform to deploy, supports windows/linux/android/ios."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
if args.platform not in all_sources[args.model]:
|
||||||
|
print(
|
||||||
|
"The model:{} only supports platform of {}, {} is not supported now.".
|
||||||
|
format(args.model,
|
||||||
|
list(all_sources[args.model].keys()), args.platform))
|
||||||
|
return
|
||||||
|
|
||||||
|
if args.soc is None or args.soc == "":
|
||||||
|
print(
|
||||||
|
"Please define --soc to choose which hardware to deploy, for model:{} and platform:{}, the available socs are {}.".
|
||||||
|
format(args.model, args.platform,
|
||||||
|
list(all_sources[args.model][args.platform].keys())))
|
||||||
|
return
|
||||||
|
|
||||||
|
if args.soc not in all_sources[args.model][args.platform]:
|
||||||
|
print(
|
||||||
|
"The model:{} in platform:{} only supports soc of {}, {} is not supported now.".
|
||||||
|
format(args.model, args.platform,
|
||||||
|
list(all_sources[args.model][args.platform].keys()),
|
||||||
|
args.soc))
|
||||||
|
return
|
||||||
|
|
||||||
|
print("\nDownloading SDK:",
|
||||||
|
all_sources[args.model][args.platform][args.soc])
|
||||||
|
|
||||||
|
save_dir = args.save_dir
|
||||||
|
sdk_name = os.path.split(all_sources[args.model][args.platform][args.soc])[
|
||||||
|
-1].strip()
|
||||||
|
if all_sources[args.model][args.platform][args.soc].count(".zip") > 0:
|
||||||
|
sdk_name = os.path.split(all_sources[args.model][args.platform][
|
||||||
|
args.soc])[-1].strip().split(".zip")[0]
|
||||||
|
new_save_dir = os.path.join(args.save_dir, sdk_name)
|
||||||
|
if not os.path.exists(new_save_dir):
|
||||||
|
os.mkdir(new_save_dir)
|
||||||
|
save_dir = new_save_dir
|
||||||
|
download_and_decompress(
|
||||||
|
all_sources[args.model][args.platform][args.soc],
|
||||||
|
new_save_dir,
|
||||||
|
rename=sdk_name + ".zip")
|
||||||
|
os.remove(os.path.join(new_save_dir, sdk_name + ".zip"))
|
||||||
|
print("Done. All the files of SDK have been extracted in {}.".format(
|
||||||
|
new_save_dir))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
||||||
|
if is_installed('cpu_fastdeploy'):
|
||||||
|
from cpu_fastdeploy import *
|
||||||
|
elif is_installed('gpu_fastdeploy'):
|
||||||
|
from gpu_fastdeploy import *
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
"[INFO] Didn't install cpu/gpu sdk in your environment now, refer https://github.com/PaddlePaddle/FastDeploy/blob/release/0.2.0/docs/server_install.md for more details."
|
||||||
|
)
|
18
sdk_mannager/fastdeploy/__main__.py
Normal file
18
sdk_mannager/fastdeploy/__main__.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import fastdeploy
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
fastdeploy.main()
|
186
sdk_mannager/fastdeploy/download.py
Normal file
186
sdk_mannager/fastdeploy/download.py
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import os.path as osp
|
||||||
|
import shutil
|
||||||
|
import requests
|
||||||
|
import time
|
||||||
|
import zipfile
|
||||||
|
import hashlib
|
||||||
|
import tqdm
|
||||||
|
import logging
|
||||||
|
|
||||||
|
DOWNLOAD_RETRY_LIMIT = 3
|
||||||
|
|
||||||
|
|
||||||
|
def md5check(fullname, md5sum=None):
|
||||||
|
if md5sum is None:
|
||||||
|
return True
|
||||||
|
|
||||||
|
logging.info("File {} md5 checking...".format(fullname))
|
||||||
|
md5 = hashlib.md5()
|
||||||
|
with open(fullname, 'rb') as f:
|
||||||
|
for chunk in iter(lambda: f.read(4096), b""):
|
||||||
|
md5.update(chunk)
|
||||||
|
calc_md5sum = md5.hexdigest()
|
||||||
|
|
||||||
|
if calc_md5sum != md5sum:
|
||||||
|
logging.info("File {} md5 check failed, {}(calc) != "
|
||||||
|
"{}(base)".format(fullname, calc_md5sum, md5sum))
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def move_and_merge_tree(src, dst):
|
||||||
|
"""
|
||||||
|
Move src directory to dst, if dst is already exists,
|
||||||
|
merge src to dst
|
||||||
|
"""
|
||||||
|
if not osp.exists(dst):
|
||||||
|
shutil.move(src, dst)
|
||||||
|
else:
|
||||||
|
if not osp.isdir(src):
|
||||||
|
shutil.move(src, dst)
|
||||||
|
return
|
||||||
|
for fp in os.listdir(src):
|
||||||
|
src_fp = osp.join(src, fp)
|
||||||
|
dst_fp = osp.join(dst, fp)
|
||||||
|
if osp.isdir(src_fp):
|
||||||
|
if osp.isdir(dst_fp):
|
||||||
|
move_and_merge_tree(src_fp, dst_fp)
|
||||||
|
else:
|
||||||
|
shutil.move(src_fp, dst_fp)
|
||||||
|
elif osp.isfile(src_fp) and \
|
||||||
|
not osp.isfile(dst_fp):
|
||||||
|
shutil.move(src_fp, dst_fp)
|
||||||
|
|
||||||
|
|
||||||
|
def download(url, path, rename=None, md5sum=None, show_progress=False):
|
||||||
|
"""
|
||||||
|
Download from url, save to path.
|
||||||
|
url (str): download url
|
||||||
|
path (str): download to given path
|
||||||
|
"""
|
||||||
|
if not osp.exists(path):
|
||||||
|
os.makedirs(path)
|
||||||
|
|
||||||
|
fname = osp.split(url)[-1]
|
||||||
|
fullname = osp.join(path, fname)
|
||||||
|
if rename is not None:
|
||||||
|
fullname = osp.join(path, rename)
|
||||||
|
retry_cnt = 0
|
||||||
|
while not (osp.exists(fullname) and md5check(fullname, md5sum)):
|
||||||
|
if retry_cnt < DOWNLOAD_RETRY_LIMIT:
|
||||||
|
retry_cnt += 1
|
||||||
|
else:
|
||||||
|
logging.debug("{} download failed.".format(fname))
|
||||||
|
raise RuntimeError("Download from {} failed. "
|
||||||
|
"Retry limit reached".format(url))
|
||||||
|
|
||||||
|
logging.info("Downloading {} from {}".format(fname, url))
|
||||||
|
|
||||||
|
req = requests.get(url, stream=True)
|
||||||
|
if req.status_code != 200:
|
||||||
|
raise RuntimeError("Downloading from {} failed with code "
|
||||||
|
"{}!".format(url, req.status_code))
|
||||||
|
|
||||||
|
# For protecting download interupted, download to
|
||||||
|
# tmp_fullname firstly, move tmp_fullname to fullname
|
||||||
|
# after download finished
|
||||||
|
tmp_fullname = fullname + "_tmp"
|
||||||
|
total_size = req.headers.get('content-length')
|
||||||
|
with open(tmp_fullname, 'wb') as f:
|
||||||
|
if total_size and show_progress:
|
||||||
|
for chunk in tqdm.tqdm(
|
||||||
|
req.iter_content(chunk_size=1024),
|
||||||
|
total=(int(total_size) + 1023) // 1024,
|
||||||
|
unit='KB'):
|
||||||
|
f.write(chunk)
|
||||||
|
else:
|
||||||
|
for chunk in req.iter_content(chunk_size=1024):
|
||||||
|
if chunk:
|
||||||
|
f.write(chunk)
|
||||||
|
shutil.move(tmp_fullname, fullname)
|
||||||
|
logging.debug("{} download completed.".format(fname))
|
||||||
|
|
||||||
|
return fullname
|
||||||
|
|
||||||
|
|
||||||
|
def decompress(fname):
|
||||||
|
"""
|
||||||
|
Decompress for zip and tar file
|
||||||
|
"""
|
||||||
|
logging.info("Decompressing {}...".format(fname))
|
||||||
|
|
||||||
|
# For protecting decompressing interupted,
|
||||||
|
# decompress to fpath_tmp directory firstly, if decompress
|
||||||
|
# successed, move decompress files to fpath and delete
|
||||||
|
# fpath_tmp and remove download compress file.
|
||||||
|
fpath = osp.split(fname)[0]
|
||||||
|
fpath_tmp = osp.join(fpath, 'tmp')
|
||||||
|
if osp.isdir(fpath_tmp):
|
||||||
|
shutil.rmtree(fpath_tmp)
|
||||||
|
os.makedirs(fpath_tmp)
|
||||||
|
|
||||||
|
if fname.find('.tar') >= 0 or fname.find('.tgz') >= 0:
|
||||||
|
with tarfile.open(fname) as tf:
|
||||||
|
tf.extractall(path=fpath_tmp)
|
||||||
|
elif fname.find('.zip') >= 0:
|
||||||
|
with zipfile.ZipFile(fname) as zf:
|
||||||
|
zf.extractall(path=fpath_tmp)
|
||||||
|
else:
|
||||||
|
raise TypeError("Unsupport compress file type {}".format(fname))
|
||||||
|
|
||||||
|
for f in os.listdir(fpath_tmp):
|
||||||
|
src_dir = osp.join(fpath_tmp, f)
|
||||||
|
dst_dir = osp.join(fpath, f)
|
||||||
|
move_and_merge_tree(src_dir, dst_dir)
|
||||||
|
|
||||||
|
shutil.rmtree(fpath_tmp)
|
||||||
|
logging.debug("{} decompressed.".format(fname))
|
||||||
|
return dst_dir
|
||||||
|
|
||||||
|
|
||||||
|
def url2dir(url, path, rename=None):
|
||||||
|
full_name = download(url, path, rename, show_progress=True)
|
||||||
|
print("SDK is donwloaded, now extracting...")
|
||||||
|
if url.count(".tgz") > 0 or url.count(".tar") > 0 or url.count("zip") > 0:
|
||||||
|
return decompress(full_name)
|
||||||
|
|
||||||
|
|
||||||
|
def download_and_decompress(url, path='.', rename=None):
|
||||||
|
fname = osp.split(url)[-1]
|
||||||
|
fullname = osp.join(path, fname)
|
||||||
|
# if url.endswith(('tgz', 'tar.gz', 'tar', 'zip')):
|
||||||
|
# fullname = osp.join(path, fname.split('.')[0])
|
||||||
|
nranks = 0
|
||||||
|
if nranks <= 1:
|
||||||
|
dst_dir = url2dir(url, path, rename)
|
||||||
|
if dst_dir is not None:
|
||||||
|
fullname = dst_dir
|
||||||
|
else:
|
||||||
|
lock_path = fullname + '.lock'
|
||||||
|
if not os.path.exists(fullname):
|
||||||
|
with open(lock_path, 'w'):
|
||||||
|
os.utime(lock_path, None)
|
||||||
|
if local_rank == 0:
|
||||||
|
dst_dir = url2dir(url, path, rename)
|
||||||
|
if dst_dir is not None:
|
||||||
|
fullname = dst_dir
|
||||||
|
os.remove(lock_path)
|
||||||
|
else:
|
||||||
|
while os.path.exists(lock_path):
|
||||||
|
time.sleep(1)
|
||||||
|
return
|
2
sdk_mannager/requirements.txt
Normal file
2
sdk_mannager/requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
tqdm
|
||||||
|
six
|
36
sdk_mannager/setup.py
Normal file
36
sdk_mannager/setup.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import setuptools
|
||||||
|
import fastdeploy
|
||||||
|
import io
|
||||||
|
import os
|
||||||
|
|
||||||
|
with open("requirements.txt") as fin:
|
||||||
|
REQUIRED_PACKAGES = fin.read()
|
||||||
|
|
||||||
|
|
||||||
|
def read(*names, **kwargs):
|
||||||
|
with io.open(
|
||||||
|
os.path.join(os.path.dirname(__file__), *names),
|
||||||
|
encoding=kwargs.get("encoding", "utf8")) as fp:
|
||||||
|
return fp.read()
|
||||||
|
|
||||||
|
|
||||||
|
setuptools.setup(
|
||||||
|
name="fastdeploy-python",
|
||||||
|
version=fastdeploy.__version__,
|
||||||
|
author="FastDeploy",
|
||||||
|
author_email="fastdeploy@baidu.com",
|
||||||
|
description="FastDeploy is a toolkit to deploy deeplearning models.",
|
||||||
|
long_description=read("../README.md"),
|
||||||
|
long_description_content_type="text/markdown",
|
||||||
|
url="https://github.com/PaddlePaddle/FastDeploy",
|
||||||
|
packages=setuptools.find_packages(),
|
||||||
|
install_requires=REQUIRED_PACKAGES,
|
||||||
|
classifiers=[
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
"License :: OSI Approved :: Apache Software License",
|
||||||
|
"Operating System :: OS Independent",
|
||||||
|
],
|
||||||
|
license='Apache 2.0',
|
||||||
|
entry_points={
|
||||||
|
'console_scripts': ['fastdeploy=fastdeploy.__init__:main', ]
|
||||||
|
})
|
62
setup.py
62
setup.py
@@ -17,6 +17,17 @@ from __future__ import absolute_import
|
|||||||
from __future__ import division
|
from __future__ import division
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
import shutil
|
||||||
|
import os
|
||||||
|
|
||||||
|
PACKAGE_NAME = os.getenv("PACKAGE_NAME", "fastdeploy")
|
||||||
|
assert PACKAGE_NAME in [
|
||||||
|
"cpu_fastdeploy", "gpu_fastdeploy", "fastdeploy"
|
||||||
|
], "Only support PACKAGE_NAME set to ['cpu_fastdeploy', 'gpu_fastdeploy', 'fastdeploy'] now."
|
||||||
|
if PACKAGE_NAME != "fastdeploy":
|
||||||
|
if os.path.exists(PACKAGE_NAME):
|
||||||
|
shutil.rmtree(PACKAGE_NAME)
|
||||||
|
shutil.copytree("fastdeploy", PACKAGE_NAME)
|
||||||
|
|
||||||
from distutils.spawn import find_executable
|
from distutils.spawn import find_executable
|
||||||
from distutils import sysconfig, log
|
from distutils import sysconfig, log
|
||||||
@@ -28,7 +39,6 @@ import setuptools.command.build_ext
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
import glob
|
import glob
|
||||||
import os
|
|
||||||
import shlex
|
import shlex
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
@@ -39,7 +49,6 @@ import multiprocessing
|
|||||||
with open("requirements.txt") as fin:
|
with open("requirements.txt") as fin:
|
||||||
REQUIRED_PACKAGES = fin.read()
|
REQUIRED_PACKAGES = fin.read()
|
||||||
|
|
||||||
PACKAGE_NAME = "fastdeploy"
|
|
||||||
setup_configs = dict()
|
setup_configs = dict()
|
||||||
setup_configs["ENABLE_PADDLE_FRONTEND"] = os.getenv("ENABLE_PADDLE_FRONTEND",
|
setup_configs["ENABLE_PADDLE_FRONTEND"] = os.getenv("ENABLE_PADDLE_FRONTEND",
|
||||||
"ON")
|
"ON")
|
||||||
@@ -53,11 +62,14 @@ setup_configs["WITH_GPU"] = os.getenv("WITH_GPU", "OFF")
|
|||||||
setup_configs["TRT_DIRECTORY"] = os.getenv("TRT_DIRECTORY", "UNDEFINED")
|
setup_configs["TRT_DIRECTORY"] = os.getenv("TRT_DIRECTORY", "UNDEFINED")
|
||||||
setup_configs["CUDA_DIRECTORY"] = os.getenv("CUDA_DIRECTORY",
|
setup_configs["CUDA_DIRECTORY"] = os.getenv("CUDA_DIRECTORY",
|
||||||
"/usr/local/cuda")
|
"/usr/local/cuda")
|
||||||
|
setup_configs["LIBRARY_NAME"] = PACKAGE_NAME
|
||||||
|
setup_configs["PY_LIBRARY_NAME"] = PACKAGE_NAME + "_main"
|
||||||
|
|
||||||
if os.getenv("CMAKE_CXX_COMPILER", None) is not None:
|
if os.getenv("CMAKE_CXX_COMPILER", None) is not None:
|
||||||
setup_configs["CMAKE_CXX_COMPILER"] = os.getenv("CMAKE_CXX_COMPILER")
|
setup_configs["CMAKE_CXX_COMPILER"] = os.getenv("CMAKE_CXX_COMPILER")
|
||||||
|
|
||||||
TOP_DIR = os.path.realpath(os.path.dirname(__file__))
|
TOP_DIR = os.path.realpath(os.path.dirname(__file__))
|
||||||
SRC_DIR = os.path.join(TOP_DIR, "fastdeploy")
|
SRC_DIR = os.path.join(TOP_DIR, PACKAGE_NAME)
|
||||||
CMAKE_BUILD_DIR = os.path.join(TOP_DIR, '.setuptools-cmake-build')
|
CMAKE_BUILD_DIR = os.path.join(TOP_DIR, '.setuptools-cmake-build')
|
||||||
|
|
||||||
WINDOWS = (os.name == 'nt')
|
WINDOWS = (os.name == 'nt')
|
||||||
@@ -237,8 +249,8 @@ class build_py(setuptools.command.build_py.build_py):
|
|||||||
self.run_command('cmake_build')
|
self.run_command('cmake_build')
|
||||||
|
|
||||||
generated_python_files = \
|
generated_python_files = \
|
||||||
glob.glob(os.path.join(CMAKE_BUILD_DIR, 'fastdeploy', '*.py')) + \
|
glob.glob(os.path.join(CMAKE_BUILD_DIR, PACKAGE_NAME, '*.py')) + \
|
||||||
glob.glob(os.path.join(CMAKE_BUILD_DIR, 'fastdeploy', '*.pyi'))
|
glob.glob(os.path.join(CMAKE_BUILD_DIR, PACKAGE_NAME, '*.pyi'))
|
||||||
|
|
||||||
for src in generated_python_files:
|
for src in generated_python_files:
|
||||||
dst = os.path.join(TOP_DIR, os.path.relpath(src, CMAKE_BUILD_DIR))
|
dst = os.path.join(TOP_DIR, os.path.relpath(src, CMAKE_BUILD_DIR))
|
||||||
@@ -273,7 +285,7 @@ class build_ext(setuptools.command.build_ext.build_ext):
|
|||||||
lib_path = release_lib_dir
|
lib_path = release_lib_dir
|
||||||
src = os.path.join(lib_path, filename)
|
src = os.path.join(lib_path, filename)
|
||||||
dst = os.path.join(
|
dst = os.path.join(
|
||||||
os.path.realpath(self.build_lib), "fastdeploy", filename)
|
os.path.realpath(self.build_lib), PACKAGE_NAME, filename)
|
||||||
self.copy_file(src, dst)
|
self.copy_file(src, dst)
|
||||||
|
|
||||||
|
|
||||||
@@ -305,7 +317,8 @@ cmdclass = {
|
|||||||
|
|
||||||
ext_modules = [
|
ext_modules = [
|
||||||
setuptools.Extension(
|
setuptools.Extension(
|
||||||
name=str(PACKAGE_NAME + '.fastdeploy_main'), sources=[]),
|
name=str(PACKAGE_NAME + '.' + setup_configs["PY_LIBRARY_NAME"]),
|
||||||
|
sources=[]),
|
||||||
]
|
]
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
@@ -313,6 +326,9 @@ ext_modules = [
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# no need to do fancy stuff so far
|
# no need to do fancy stuff so far
|
||||||
|
if PACKAGE_NAME != "fastdeploy":
|
||||||
|
packages = setuptools.find_packages(exclude=['fastdeploy*'])
|
||||||
|
else:
|
||||||
packages = setuptools.find_packages()
|
packages = setuptools.find_packages()
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
@@ -335,8 +351,8 @@ if sys.argv[1] == "install" or sys.argv[1] == "bdist_wheel":
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
shutil.copy("ThirdPartyNotices.txt", "fastdeploy")
|
shutil.copy("ThirdPartyNotices.txt", PACKAGE_NAME)
|
||||||
shutil.copy("LICENSE", "fastdeploy")
|
shutil.copy("LICENSE", PACKAGE_NAME)
|
||||||
depend_libs = list()
|
depend_libs = list()
|
||||||
|
|
||||||
# copy fastdeploy library
|
# copy fastdeploy library
|
||||||
@@ -344,10 +360,11 @@ if sys.argv[1] == "install" or sys.argv[1] == "bdist_wheel":
|
|||||||
for f in os.listdir(".setuptools-cmake-build"):
|
for f in os.listdir(".setuptools-cmake-build"):
|
||||||
if not os.path.isfile(os.path.join(".setuptools-cmake-build", f)):
|
if not os.path.isfile(os.path.join(".setuptools-cmake-build", f)):
|
||||||
continue
|
continue
|
||||||
if f.count("fastdeploy") > 0:
|
if f.count(PACKAGE_NAME) > 0:
|
||||||
shutil.copy(
|
shutil.copy(
|
||||||
os.path.join(".setuptools-cmake-build", f), "fastdeploy/libs")
|
os.path.join(".setuptools-cmake-build", f),
|
||||||
if f.count("fastdeploy_main.cpython-"):
|
os.path.join(PACKAGE_NAME, "libs"))
|
||||||
|
if f.count(".cpython-") > 0:
|
||||||
pybind_so_file = os.path.join(".setuptools-cmake-build", f)
|
pybind_so_file = os.path.join(".setuptools-cmake-build", f)
|
||||||
|
|
||||||
if not os.path.exists(".setuptools-cmake-build/third_libs/install"):
|
if not os.path.exists(".setuptools-cmake-build/third_libs/install"):
|
||||||
@@ -355,11 +372,11 @@ if sys.argv[1] == "install" or sys.argv[1] == "bdist_wheel":
|
|||||||
"Cannot find directory third_libs/install in .setuptools-cmake-build."
|
"Cannot find directory third_libs/install in .setuptools-cmake-build."
|
||||||
)
|
)
|
||||||
|
|
||||||
if os.path.exists("fastdeploy/libs/third_libs"):
|
if os.path.exists(os.path.join(PACKAGE_NAME, "libs/third_libs")):
|
||||||
shutil.rmtree("fastdeploy/libs/third_libs")
|
shutil.rmtree(os.path.join(PACKAGE_NAME, "libs/third_libs"))
|
||||||
shutil.copytree(
|
shutil.copytree(
|
||||||
".setuptools-cmake-build/third_libs/install",
|
".setuptools-cmake-build/third_libs/install",
|
||||||
"fastdeploy/libs/third_libs",
|
os.path.join(PACKAGE_NAME, "libs/third_libs"),
|
||||||
symlinks=True)
|
symlinks=True)
|
||||||
|
|
||||||
third_party_path = os.path.join(".setuptools-cmake-build", "third_party")
|
third_party_path = os.path.join(".setuptools-cmake-build", "third_party")
|
||||||
@@ -372,12 +389,12 @@ if sys.argv[1] == "install" or sys.argv[1] == "bdist_wheel":
|
|||||||
release_dir = os.path.join(lib_dir_name, f1)
|
release_dir = os.path.join(lib_dir_name, f1)
|
||||||
if f1 == "Release" and not os.path.isfile(release_dir):
|
if f1 == "Release" and not os.path.isfile(release_dir):
|
||||||
if os.path.exists(
|
if os.path.exists(
|
||||||
os.path.join("fastdeploy/libs/third_libs", f)):
|
os.path.join(PACKAGE_NAME, "libs/third_libs", f)):
|
||||||
shutil.rmtree(
|
shutil.rmtree(
|
||||||
os.path.join("fastdeploy/libs/third_libs", f))
|
os.path.join(PACKAGE_NAME, "libs/third_libs", f))
|
||||||
shutil.copytree(release_dir,
|
shutil.copytree(release_dir,
|
||||||
os.path.join("fastdeploy/libs/third_libs",
|
os.path.join(PACKAGE_NAME,
|
||||||
f, "lib"))
|
"libs/third_libs", f, "lib"))
|
||||||
|
|
||||||
if platform.system().lower() == "windows":
|
if platform.system().lower() == "windows":
|
||||||
release_dir = os.path.join(".setuptools-cmake-build", "Release")
|
release_dir = os.path.join(".setuptools-cmake-build", "Release")
|
||||||
@@ -387,7 +404,7 @@ if sys.argv[1] == "install" or sys.argv[1] == "bdist_wheel":
|
|||||||
continue
|
continue
|
||||||
if filename.endswith(".pyd"):
|
if filename.endswith(".pyd"):
|
||||||
continue
|
continue
|
||||||
shutil.copy(filename, "fastdeploy/libs")
|
shutil.copy(filename, os.path.join(PACKAGE_NAME, "libs"))
|
||||||
|
|
||||||
if platform.system().lower() == "linux":
|
if platform.system().lower() == "linux":
|
||||||
rpaths = ["$ORIGIN:$ORIGIN/libs"]
|
rpaths = ["$ORIGIN:$ORIGIN/libs"]
|
||||||
@@ -445,9 +462,10 @@ if sys.argv[1] == "install" or sys.argv[1] == "bdist_wheel":
|
|||||||
command) == 0, "command execute failed! command: {}".format(
|
command) == 0, "command execute failed! command: {}".format(
|
||||||
command)
|
command)
|
||||||
|
|
||||||
all_files = get_all_files("fastdeploy/libs")
|
all_files = get_all_files(os.path.join(PACKAGE_NAME, "libs"))
|
||||||
for f in all_files:
|
for f in all_files:
|
||||||
package_data[PACKAGE_NAME].append(os.path.relpath(f, "fastdeploy"))
|
package_data[PACKAGE_NAME].append(os.path.relpath(f, PACKAGE_NAME))
|
||||||
|
|
||||||
setuptools.setup(
|
setuptools.setup(
|
||||||
name=PACKAGE_NAME,
|
name=PACKAGE_NAME,
|
||||||
version=VersionInfo.version,
|
version=VersionInfo.version,
|
||||||
|
Reference in New Issue
Block a user