#!/usr/bin/env python3 # encoding: utf-8 # Copyright 2020 Huawei Technologies Co., Ltd # # 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. # ============================================================================ """setup package.""" import os import stat import platform from setuptools import setup, find_packages from setuptools.command.egg_info import egg_info from setuptools.command.build_py import build_py # 获取环境变量 backend_policy = os.getenv('BACKEND_POLICY') device_target = os.getenv('BACKEND_TARGET') commit_id = os.getenv('COMMIT_ID').replace("\n", "") package_name = os.getenv('MS_PACKAGE_NAME').replace("\n", "") build_path = os.getenv('BUILD_PATH') # 获取当前文件路径 pwd = os.path.dirname(os.path.realpath(__file__)) # 获取包目录路径 pkg_dir = os.path.join(build_path, 'package') def _read_file(filename): """读取文件内容""" with open(os.path.join(pwd, filename), encoding='UTF-8') as f: return f.read() # 读取版本号 version = _read_file('version.txt').replace("\n", "") # 读取README.md文件内容 readme = _read_file('README.md') def _write_version(file): """写入版本号""" file.write("__version__ = '{}'\n".format(version)) def _write_config(file): """写入后端策略""" file.write("__backend__ = '{}'\n".format(backend_policy)) def _write_commit_file(file): """写入commit_id""" file.write("__commit_id__ = '{}'\n".format(commit_id)) def _write_package_name(file): """写入包名""" file.write("__package_name__ = '{}'\n".format(package_name)) def _write_device_target(file): """写入设备目标""" file.write("__device_target__ = '{}'\n".format(device_target)) def build_dependencies(): """generate python file""" # 生成version.py文件 version_file = os.path.join(pkg_dir, 'mindspore', 'version.py') with open(version_file, 'w') as f: _write_version(f) version_file = os.path.join(pwd, 'mindspore/python/mindspore', 'version.py') with open(version_file, 'w') as f: _write_version(f) # 生成default_config.py文件 config_file = os.path.join(pkg_dir, 'mindspore', 'default_config.py') with open(config_file, 'w') as f: _write_config(f) config_file = os.path.join(pwd, 'mindspore/python/mindspore', 'default_config.py') with open(config_file, 'w') as f: _write_config(f) # 向default_config.py文件中追加device_target target = os.path.join(pkg_dir, 'mindspore', 'default_config.py') with open(target, 'a') as f: _write_device_target(f) target = os.path.join(pwd, 'mindspore/python/mindspore', 'default_config.py') with open(target, 'a') as f: _write_device_target(f) # 向default_config.py文件中追加package_name package_info = os.path.join(pkg_dir, 'mindspore', 'default_config.py') with open(package_info, 'a') as f: _write_package_name(f) package_info = os.path.join(pwd, 'mindspore/python/mindspore', 'default_config.py') with open(package_info, 'a') as f: _write_package_name(f) # 生成.commit_id文件 commit_file = os.path.join(pkg_dir, 'mindspore', '.commit_id') with open(commit_file, 'w') as f: _write_commit_file(f) commit_file = os.path.join(pwd, 'mindspore/python/mindspore', '.commit_id') with open(commit_file, 'w') as f: _write_commit_file(f) build_dependencies() required_package = [ 'numpy >= 1.17.0', 'protobuf >= 3.13.0', 'asttokens >= 2.0.0', 'pillow >= 6.2.0', 'scipy >= 1.5.2', 'packaging >= 20.0', 'psutil >= 5.6.1', 'astunparse >= 0.0' ] package_data = { '': [ '*.so*', '*.pyd', '*.dll', 'bin/*', 'lib/*.so*', 'lib/*.a', 'lib/*.dylib*', '.commit_id', 'config/*', 'ops/bprop_mindir/*', 'include/*', 'include/*/*', 'include/*/*/*', 'include/*/*/*/*' ] } def update_permissions(path): """ Update permissions. Args: path (str): Target directory path. """ # 判断操作系统是否为Windows if platform.system() == "Windows": return # 遍历目标目录下的所有文件和文件夹 for dirpath, dirnames, filenames in os.walk(path): # 遍历文件夹 for dirname in dirnames: # 获取文件夹的完整路径 dir_fullpath = os.path.join(dirpath, dirname) # 更新文件夹的权限 os.chmod(dir_fullpath, stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC | stat.S_IRGRP | stat.S_IXGRP) # 遍历文件 for filename in filenames: # 获取文件的完整路径 file_fullpath = os.path.join(dirpath, filename) # 更新文件的权限 os.chmod(file_fullpath, stat.S_IREAD) class EggInfo(egg_info): """Egg info.""" def run(self): super().run() # 获取egg-info目录的路径 egg_info_dir = os.path.join(pkg_dir, 'mindspore.egg-info') # 更新egg-info目录的权限 update_permissions(egg_info_dir) class BuildPy(build_py): """BuildPy.""" def run(self): super().run() # 获取build目录下的lib/mindspore目录的路径 mindspore_dir = os.path.join(pkg_dir, 'build', 'lib', 'mindspore') # 更新lib/mindspore目录的权限 update_permissions(mindspore_dir) # 获取build目录下的lib/mindspore/_akg目录的路径 mindspore_dir = os.path.join(pkg_dir, 'build', 'lib', 'mindspore', '_akg') # 更新lib/mindspore/_akg目录的权限 update_permissions(mindspore_dir) # 设置包的名称 setup( name=package_name, # 设置包的版本 version=version, # 设置包的作者 author='The MindSpore Authors', # 设置包的作者邮箱 author_email='contact@mindspore.cn', # 设置包的网址 url='https://www.mindspore.cn', # 设置包的下载网址 download_url='https://github.com/mindspore-ai/mindspore/tags', # 设置包的源代码网址 project_urls={ 'Sources': 'https://github.com/mindspore-ai/mindspore', # 设置包的问题追踪网址 'Issue Tracker': 'https://github.com/mindspore-ai/mindspore/issues', }, # 设置包的描述 description='MindSpore is a new open source deep learning training/inference ' 'framework that could be used for mobile, edge and cloud scenarios.', # 读取readme文件作为包的详细描述 long_description=readme, # 设置详细描述的格式 long_description_content_type="text/markdown", # 查找包中的所有模块 packages=find_packages(), # 设置包的数据 package_data=package_data, # 包含包中的所有数据 include_package_data=True, # 设置自定义的命令类 cmdclass={ 'egg_info': EggInfo, 'build_py': BuildPy, }, # 设置包的入口点 entry_points={ 'console_scripts': [ 'cache_admin=mindspore.dataset.engine.cache_admin:main', ], }, # 设置包的Python版本要求 python_requires='>=3.7', # 设置包的依赖 install_requires=required_package, # 设置包的分类器 classifiers=[ 'Development Status :: 4 - Beta', 'Environment :: Console', 'Intended Audience :: Science/Research', 'Intended Audience :: Developers', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3 :: Only', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: C++', 'Topic :: Scientific/Engineering', 'Topic :: Scientific/Engineering :: Artificial Intelligence', 'Topic :: Software Development', 'Topic :: Software Development :: Libraries', 'Topic :: Software Development :: Libraries :: Python Modules', ], # 设置包的许可证 license='Apache 2.0', # 设置包的关键词 keywords='mindspore machine learning', )