2020-09-22 01:43:21 +00:00
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
import os
import numpy
from setuptools import find_packages , setup , Extension
2021-12-12 12:02:20 +08:00
def read ( rel_path : str ) - > str :
here = os . path . abspath ( os . path . dirname ( __file__ ) )
2021-12-25 18:00:56 +08:00
with open ( os . path . join ( here , rel_path ) , encoding = " utf-8 " ) as fp :
2021-12-12 12:02:20 +08:00
return fp . read ( )
def get_version ( rel_path : str ) - > str :
for line in read ( rel_path ) . splitlines ( ) :
if line . startswith ( " __version__ " ) :
delim = ' " ' if ' " ' in line else " ' "
return line . split ( delim ) [ 1 ]
raise RuntimeError ( " Unable to find version string. " )
2020-09-22 01:43:21 +00:00
# Package meta-data.
2020-09-29 02:41:58 +08:00
NAME = " pyqlib "
2020-09-23 23:01:39 -05:00
DESCRIPTION = " A Quantitative-research Platform "
2020-09-22 01:43:21 +00:00
REQUIRES_PYTHON = " >=3.5.0 "
2020-12-04 09:45:00 +08:00
2021-12-12 12:02:20 +08:00
VERSION = get_version ( " qlib/__init__.py " )
2020-09-22 01:43:21 +00:00
# Detect Cython
try :
import Cython
ver = Cython . __version__
_CYTHON_INSTALLED = ver > = " 0.28 "
except ImportError :
_CYTHON_INSTALLED = False
if not _CYTHON_INSTALLED :
print ( " Required Cython version >= 0.28 is not detected! " )
print ( ' Please run " pip install --upgrade cython " first. ' )
exit ( - 1 )
# What packages are required for this module to be executed?
# `estimator` may depend on other packages. In order to reduce dependencies, it is not written here.
REQUIRED = [
2022-12-31 07:58:41 +08:00
" numpy>=1.12.0, <1.24 " ,
2020-09-22 01:43:21 +00:00
" pandas>=0.25.1 " ,
" scipy>=1.0.0 " ,
" requests>=2.18.0 " ,
" sacred>=0.7.4 " ,
2021-04-25 23:50:29 +08:00
" python-socketio " ,
2020-09-22 01:43:21 +00:00
" redis>=3.0.1 " ,
" python-redis-lock>=3.3.1 " ,
" schedule>=0.6.0 " ,
2021-10-01 02:15:30 +08:00
" cvxpy>=1.0.21 " ,
2021-12-10 23:37:08 -05:00
" hyperopt==0.1.2 " ,
2020-11-25 12:58:43 +00:00
" fire>=0.3.1 " ,
2020-09-22 01:43:21 +00:00
" statsmodels " ,
" xlrd>=1.0.0 " ,
2021-10-01 02:15:30 +08:00
" plotly>=4.12.0 " ,
" matplotlib>=3.3 " ,
2020-09-22 01:43:21 +00:00
" tables>=3.6.1 " ,
" pyyaml>=5.3.1 " ,
2022-11-20 14:18:35 +08:00
# To ensure stable operation of the experiment manager, we have limited the version of mlflow,
# and we need to verify whether version 2.0 of mlflow can serve qlib properly.
2022-11-18 13:11:31 +08:00
" mlflow>=1.12.1, <=1.30.0 " ,
2024-03-07 14:41:21 +08:00
# mlflow 1.30.0 requires packaging<22, so we limit the packaging version, otherwise the CI will fail.
" packaging<22 " ,
2020-09-22 01:43:21 +00:00
" tqdm " ,
" loguru " ,
2022-03-21 08:00:28 +08:00
" lightgbm>=3.3.0 " ,
2020-09-22 01:43:21 +00:00
" tornado " ,
2020-11-11 09:34:10 +08:00
" joblib>=0.17.0 " ,
2023-11-21 20:31:47 +08:00
# With the upgrading of ruamel.yaml to 0.18, the safe_load method was deprecated,
# which would cause qlib.workflow.cli to not work properly,
# and no good replacement has been found, so the version of ruamel.yaml has been restricted for now.
# Refs: https://pypi.org/project/ruamel.yaml/
" ruamel.yaml<=0.17.36 " ,
2021-02-26 09:14:40 +00:00
" pymongo==3.7.2 " , # For task management
2021-02-22 10:29:29 +08:00
" scikit-learn>=0.22 " ,
2021-04-27 04:12:08 +00:00
" dill " ,
2021-06-01 16:19:01 +08:00
" dataclasses;python_version< ' 3.7 ' " ,
2021-10-01 02:15:30 +08:00
" filelock " ,
2022-04-28 19:13:45 +08:00
" jinja2<3.1.0 " , # for passing the readthedocs workflow.
2022-05-21 23:50:18 +08:00
" gym " ,
2022-05-31 19:35:49 +08:00
# Installing the latest version of protobuf for python versions below 3.8 will cause unit tests to fail.
" protobuf<=3.20.1;python_version<= ' 3.8 ' " ,
2023-06-25 23:39:11 +08:00
" cryptography " ,
2020-09-22 01:43:21 +00:00
]
# Numpy include
NUMPY_INCLUDE = numpy . get_include ( )
here = os . path . abspath ( os . path . dirname ( __file__ ) )
2020-10-09 14:33:29 +08:00
with open ( os . path . join ( here , " README.md " ) , encoding = " utf-8 " ) as f :
2020-09-29 02:41:58 +08:00
long_description = f . read ( )
2020-09-22 01:43:21 +00:00
# Cython Extensions
extensions = [
Extension (
" qlib.data._libs.rolling " ,
[ " qlib/data/_libs/rolling.pyx " ] ,
language = " c++ " ,
include_dirs = [ NUMPY_INCLUDE ] ,
) ,
Extension (
" qlib.data._libs.expanding " ,
[ " qlib/data/_libs/expanding.pyx " ] ,
language = " c++ " ,
include_dirs = [ NUMPY_INCLUDE ] ,
) ,
]
# Where the magic happens:
setup (
name = NAME ,
version = VERSION ,
2020-10-09 14:33:29 +08:00
license = " MIT Licence " ,
url = " https://github.com/microsoft/qlib " ,
2020-09-22 01:43:21 +00:00
description = DESCRIPTION ,
long_description = long_description ,
2020-10-09 14:33:29 +08:00
long_description_content_type = " text/markdown " ,
2020-09-22 01:43:21 +00:00
python_requires = REQUIRES_PYTHON ,
2020-12-10 07:23:20 +00:00
packages = find_packages ( exclude = ( " tests " , ) ) ,
2020-09-22 01:43:21 +00:00
# if your package is a single module, use this instead of 'packages':
# py_modules=['qlib'],
entry_points = {
# 'console_scripts': ['mycli=mymodule:cli'],
" console_scripts " : [
2020-11-22 03:17:50 +00:00
" qrun=qlib.workflow.cli:run " ,
2020-09-22 01:43:21 +00:00
] ,
} ,
ext_modules = extensions ,
install_requires = REQUIRED ,
2022-03-10 14:27:52 +08:00
extras_require = {
" dev " : [
" coverage " ,
" pytest>=3 " ,
" sphinx " ,
" sphinx_rtd_theme " ,
2022-03-18 16:42:18 +08:00
" pre-commit " ,
2022-06-28 10:17:29 +08:00
# CI dependencies
" wheel " ,
" setuptools " ,
" black " ,
2023-11-21 20:31:47 +08:00
# Version 3.0 of pylint had problems with the build process, so we limited the version of pylint.
" pylint<=2.17.6 " ,
2022-10-20 08:38:05 +08:00
# Using the latest versions(0.981 and 0.982) of mypy,
# the error "multiprocessing.Value()" is detected in the file "qlib/rl/utils/data_queue.py",
# If this is fixed in a subsequent version of mypy, then we will revert to the latest version of mypy.
# References: https://github.com/python/typeshed/issues/8799
" mypy<0.981 " ,
2022-06-28 10:17:29 +08:00
" flake8 " ,
2023-02-21 09:23:22 +08:00
" nbqa " ,
" jupyter " ,
" nbconvert " ,
2022-11-10 21:10:44 +08:00
# The 5.0.0 version of importlib-metadata removed the deprecated endpoint,
# which prevented flake8 from working properly, so we restricted the version of importlib-metadata.
# To help ensure the dependencies of flake8 https://github.com/python/importlib_metadata/issues/406
" importlib-metadata<5.0.0 " ,
2022-06-28 10:17:29 +08:00
" readthedocs_sphinx_ext " ,
" cmake " ,
" lxml " ,
" baostock " ,
" yahooquery " ,
" beautifulsoup4 " ,
2022-12-30 20:42:37 +08:00
# In version 0.4.11 of tianshou, the code:
# logits, hidden = self.actor(batch.obs, state=state, info=batch.info)
# was changed in PR787,
# which causes pytest errors(AttributeError: 'dict' object has no attribute 'info') in CI,
# so we restricted the version of tianshou.
# References:
# https://github.com/thu-ml/tianshou/releases
" tianshou<=0.4.10 " ,
2022-06-28 10:17:29 +08:00
" gym>=0.24 " , # If you do not put gym at the end, gym will degrade causing pytest results to fail.
2022-05-21 18:19:24 +08:00
] ,
" rl " : [
2023-04-28 13:50:25 +08:00
" tianshou<=0.4.10 " ,
2022-05-21 18:19:24 +08:00
" torch " ,
] ,
2022-03-10 14:27:52 +08:00
} ,
2020-09-22 01:43:21 +00:00
include_package_data = True ,
classifiers = [
# Trove classifiers
# Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers
# 'License :: OSI Approved :: MIT License',
2020-09-29 02:41:58 +08:00
" Operating System :: POSIX :: Linux " ,
" Operating System :: Microsoft :: Windows " ,
2020-09-30 14:01:40 +08:00
" Operating System :: MacOS " ,
2020-09-29 02:41:58 +08:00
" License :: OSI Approved :: MIT License " ,
2020-09-22 01:43:21 +00:00
" Development Status :: 3 - Alpha " ,
" Programming Language :: Python " ,
" Programming Language :: Python :: 3 " ,
2020-09-29 02:41:58 +08:00
" Programming Language :: Python :: 3.7 " ,
" Programming Language :: Python :: 3.8 " ,
2021-10-01 02:15:30 +08:00
" Programming Language :: Python :: 3.9 " ,
2020-09-22 01:43:21 +00:00
] ,
2020-12-10 07:30:00 +00:00
)