blob: 234ebfad560f53ca37ba140323fb9d53de816e0d [file] [log] [blame]
################################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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 io
import os
import sys
from platform import python_version
from shutil import copytree, rmtree
from setuptools import setup
if sys.version_info < (3, 7) or sys.version_info >= (3, 9):
print("Only Python versions between 3.7 and 3.8 (inclusive) are supported for Flink ML. "
"The current Python version is %s." % python_version(), file=sys.stderr)
sys.exit(-1)
def remove_if_exists(file_path):
if os.path.exists(file_path):
if os.path.islink(file_path) or os.path.isfile(file_path):
os.remove(file_path)
else:
assert os.path.isdir(file_path)
rmtree(file_path)
this_directory = os.path.abspath(os.path.dirname(__file__))
version_file = os.path.join(this_directory, 'pyflink/ml/version.py')
try:
exec(open(version_file).read())
except IOError:
print("Failed to load Flink ML version file for packaging. " +
"'%s' not found!" % version_file,
file=sys.stderr)
sys.exit(-1)
VERSION = __version__ # noqa
with io.open(os.path.join(this_directory, 'README.md'), 'r', encoding='utf-8') as f:
long_description = f.read()
TEMP_PATH = "deps"
LIB_TEMP_PATH = os.path.join(TEMP_PATH, "lib")
EXAMPLES_TEMP_PATH = os.path.join(TEMP_PATH, "examples")
in_flink_ml_source = os.path.isfile("../flink-ml-core/src/main/java/org/apache/flink/ml/api/"
"Stage.java")
try:
if in_flink_ml_source:
try:
os.mkdir(TEMP_PATH)
except:
print("Temp path for symlink to parent already exists {0}".format(TEMP_PATH),
file=sys.stderr)
sys.exit(-1)
flink_ml_version = VERSION.replace(".dev0", "-SNAPSHOT")
FLINK_ML_HOME = os.path.abspath(
"../flink-ml-dist/target/flink-ml-%s-bin/flink-ml-%s"
% (flink_ml_version, flink_ml_version))
FLINK_ML_ROOT = os.path.abspath("..")
LIB_PATH = os.path.join(FLINK_ML_HOME, "lib")
EXAMPLES_PATH = os.path.join(this_directory, "pyflink/examples")
if getattr(os, "symlink", None) is not None:
os.symlink(LIB_PATH, LIB_TEMP_PATH)
os.symlink(EXAMPLES_PATH, EXAMPLES_TEMP_PATH)
else:
copytree(LIB_PATH, LIB_TEMP_PATH)
copytree(EXAMPLES_PATH, EXAMPLES_TEMP_PATH)
PACKAGES = ['pyflink',
'pyflink.ml',
'pyflink.ml.classification',
'pyflink.ml.clustering',
'pyflink.ml.evaluation',
'pyflink.ml.feature',
'pyflink.ml.recommendation',
'pyflink.ml.regression',
'pyflink.ml.stats',
'pyflink.ml.util',
'pyflink.ml.common',
'pyflink.lib',
'pyflink.examples']
PACKAGE_DIR = {
'pyflink.lib': TEMP_PATH + '/lib',
'pyflink.examples': TEMP_PATH + '/examples'}
PACKAGE_DATA = {
'pyflink.lib': ['*.jar'],
'pyflink.examples': ['*.py', '*/*.py']}
setup(
name='apache-flink-ml',
version=VERSION,
packages=PACKAGES,
include_package_data=True,
package_dir=PACKAGE_DIR,
package_data=PACKAGE_DATA,
url='https://flink.apache.org',
license='https://www.apache.org/licenses/LICENSE-2.0',
author='Apache Software Foundation',
author_email='dev@flink.apache.org',
python_requires='>=3.7',
install_requires=['apache-flink==1.17.0', 'jsonpickle==2.0.0', 'cloudpickle==2.2.0',
'pandas>=1.3.0,<1.4.0', 'numpy>=1.21.4,<1.22.0'],
tests_require=['pytest==4.4.1'],
description='Apache Flink ML Python API',
long_description=long_description,
long_description_content_type='text/markdown',
classifiers=[
'Development Status :: 5 - Production/Stable',
'License :: OSI Approved :: Apache Software License',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8'],
)
finally:
if in_flink_ml_source:
remove_if_exists(TEMP_PATH)