This is an automated email from the ASF dual-hosted git repository.
jincheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new f059b19 [FLINK-12962][python] Allows pyflink to be pip installed.
f059b19 is described below
commit f059b1981b8d2a62acfd2fac3456b8ca3a5bd18f
Author: Wei Zhong <[email protected]>
AuthorDate: Tue Jun 25 09:51:05 2019 +0800
[FLINK-12962][python] Allows pyflink to be pip installed.
This closes #8863
---
docs/flinkDev/building.md | 15 ++
docs/flinkDev/building.zh.md | 15 ++
flink-dist/src/main/flink-bin/bin/config.sh | 5 +-
.../src/main/flink-bin/bin/find-flink-home.sh | 11 +-
flink-dist/src/main/flink-bin/bin/pyflink-shell.sh | 5 +-
flink-python/{pyflink/version.py => MANIFEST.in} | 14 +-
flink-python/dev/pip_test_code.py | 53 ++++++
.../{pyflink/version.py => dev/run_pip_test.sh} | 5 +-
flink-python/pyflink/find_flink_home.py | 31 ++-
flink-python/pyflink/shell.py | 12 +-
flink-python/pyflink/version.py | 6 +-
flink-python/{pyflink/version.py => setup.cfg} | 6 +-
flink-python/setup.py | 210 ++++++++++++++++++---
flink-python/tox.ini | 3 +
tools/releasing/update_branch_version.sh | 6 +
15 files changed, 355 insertions(+), 42 deletions(-)
diff --git a/docs/flinkDev/building.md b/docs/flinkDev/building.md
index 521bc9f..c78bb3b 100644
--- a/docs/flinkDev/building.md
+++ b/docs/flinkDev/building.md
@@ -58,6 +58,21 @@ mvn clean install -DskipTests -Dfast
The default build adds a Flink-specific JAR for Hadoop 2, to allow using Flink
with HDFS and YARN.
+## Build PyFlink
+
+If you want to build a PyFlink package that can be used for pip installation,
you need to build Flink jars first, as described in [Build Flink](##Build
Flink).
+Then go to the root directory of flink source code and run this command to
build the sdist package and wheel package:
+
+{% highlight bash %}
+cd flink-python; python3 setup.py sdist bdist_wheel
+{% endhighlight %}
+
+The sdist and wheel package will be found under `./flink-python/dist/`. Either
of them could be used for pip installation, such as:
+
+{% highlight bash %}
+pip install dist/*.tar.gz
+{% endhighlight %}
+
## Dependency Shading
Flink [shades away](https://maven.apache.org/plugins/maven-shade-plugin/) some
of the libraries it uses, in order to avoid version clashes with user programs
that use different versions of these libraries. Among the shaded libraries are
*Google Guava*, *Asm*, *Apache Curator*, *Apache HTTP Components*, *Netty*, and
others.
diff --git a/docs/flinkDev/building.zh.md b/docs/flinkDev/building.zh.md
index c48de50..aa70511 100644
--- a/docs/flinkDev/building.zh.md
+++ b/docs/flinkDev/building.zh.md
@@ -58,6 +58,21 @@ mvn clean install -DskipTests -Dfast
The default build adds a Flink-specific JAR for Hadoop 2, to allow using Flink
with HDFS and YARN.
+## 构建PyFlink
+
+如果您想构建一个可用于pip安装的PyFlink包,您需要先构建Flink的Jar包,如[构建Flink](##Build Flink)中所述。
+之后,进入Flink源码根目录,并执行以下命令,构建PyFlink的源码发布包和wheel包:
+
+{% highlight bash %}
+cd flink-python; python3 setup.py sdist bdist_wheel
+{% endhighlight %}
+
+构建好的源码发布包和wheel包位于`./flink-python/dist/`目录下。它们均可使用pip安装,比如:
+
+{% highlight bash %}
+pip install dist/*.tar.gz
+{% endhighlight %}
+
## Dependency Shading
Flink [shades away](https://maven.apache.org/plugins/maven-shade-plugin/) some
of the libraries it uses, in order to avoid version clashes with user programs
that use different versions of these libraries. Among the shaded libraries are
*Google Guava*, *Asm*, *Apache Curator*, *Apache HTTP Components*, *Netty*, and
others.
diff --git a/flink-dist/src/main/flink-bin/bin/config.sh
b/flink-dist/src/main/flink-bin/bin/config.sh
index 79fa6ad..4dc57df 100755
--- a/flink-dist/src/main/flink-bin/bin/config.sh
+++ b/flink-dist/src/main/flink-bin/bin/config.sh
@@ -296,7 +296,10 @@ bin=`dirname "$target"`
SYMLINK_RESOLVED_BIN=`cd "$bin"; pwd -P`
# Define the main directory of the flink installation
-FLINK_HOME=`dirname "$SYMLINK_RESOLVED_BIN"`
+# If config.sh is called by pyflink-shell.sh in python bin directory(pip
installed), then do not need to set the FLINK_HOME here.
+if [ -z "$_FLINK_HOME_DETERMINED" ]; then
+ FLINK_HOME=`dirname "$SYMLINK_RESOLVED_BIN"`
+fi
FLINK_LIB_DIR=$FLINK_HOME/lib
FLINK_PLUGINS_DIR=$FLINK_HOME/plugins
FLINK_OPT_DIR=$FLINK_HOME/opt
diff --git a/flink-python/pyflink/version.py
b/flink-dist/src/main/flink-bin/bin/find-flink-home.sh
old mode 100644
new mode 100755
similarity index 72%
copy from flink-python/pyflink/version.py
copy to flink-dist/src/main/flink-bin/bin/find-flink-home.sh
index ca27a42..e0fe95f
--- a/flink-python/pyflink/version.py
+++ b/flink-dist/src/main/flink-bin/bin/find-flink-home.sh
@@ -1,3 +1,4 @@
+#!/usr/bin/env bash
################################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -16,4 +17,12 @@
# limitations under the License.
################################################################################
-__version__ = "0.1.0"
+CURRENT_DIR="$( cd "$(dirname "$0")" ; pwd -P )"
+FIND_FLINK_HOME_PYTHON_SCRIPT="$CURRENT_DIR/find_flink_home.py"
+
+if [ ! -f "$FIND_FLINK_HOME_PYTHON_SCRIPT" ]; then
+ export FLINK_HOME="$( cd "$CURRENT_DIR"/.. ; pwd -P )"
+else
+ PYFLINK_PYTHON="${PYFLINK_PYTHON:-"python"}"
+ export FLINK_HOME=$("$FIND_FLINK_HOME_PYTHON_SCRIPT")
+fi
diff --git a/flink-dist/src/main/flink-bin/bin/pyflink-shell.sh
b/flink-dist/src/main/flink-bin/bin/pyflink-shell.sh
index 577952b..6bbc942 100755
--- a/flink-dist/src/main/flink-bin/bin/pyflink-shell.sh
+++ b/flink-dist/src/main/flink-bin/bin/pyflink-shell.sh
@@ -18,8 +18,11 @@
################################################################################
bin=`dirname "$0"`
bin=`cd "$bin"; pwd`
+. "$bin"/find-flink-home.sh
-. "$bin"/config.sh
+_FLINK_HOME_DETERMINED=1
+
+. "$FLINK_HOME"/bin/config.sh
FLINK_CLASSPATH=`constructFlinkClassPath`
PYTHON_JAR_PATH=`echo "$FLINK_OPT_DIR"/flink-python*java-binding.jar`
diff --git a/flink-python/pyflink/version.py b/flink-python/MANIFEST.in
similarity index 75%
copy from flink-python/pyflink/version.py
copy to flink-python/MANIFEST.in
index ca27a42..a6e3bf5 100644
--- a/flink-python/pyflink/version.py
+++ b/flink-python/MANIFEST.in
@@ -16,4 +16,16 @@
# limitations under the License.
################################################################################
-__version__ = "0.1.0"
+global-exclude *.py[cod] __pycache__ .DS_Store
+graft deps/lib
+recursive-include deps/opt *
+recursive-include deps/plugins *
+graft deps/bin
+graft deps/conf
+graft deps/log
+recursive-include deps/examples *.py
+graft deps/licenses
+include README.md
+include pyflink/LICENSE
+include pyflink/NOTICE
+include pyflink/README.txt
diff --git a/flink-python/dev/pip_test_code.py
b/flink-python/dev/pip_test_code.py
new file mode 100644
index 0000000..c9a4798
--- /dev/null
+++ b/flink-python/dev/pip_test_code.py
@@ -0,0 +1,53 @@
+################################################################################
+# 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.
+################################################################################
+# test pyflink shell environment
+from pyflink.shell import bt_env, FileSystem, OldCsv, DataTypes, Schema
+
+import tempfile
+import os
+import shutil
+
+sink_path = tempfile.gettempdir() + '/batch.csv'
+if os.path.exists(sink_path):
+ if os.path.isfile(sink_path):
+ os.remove(sink_path)
+ else:
+ shutil.rmtree(sink_path)
+bt_env.exec_env().set_parallelism(1)
+t = bt_env.from_elements([(1, 'hi', 'hello'), (2, 'hi', 'hello')], ['a', 'b',
'c'])
+bt_env.connect(FileSystem().path(sink_path)) \
+ .with_format(OldCsv()
+ .field_delimiter(',')
+ .field("a", DataTypes.BIGINT())
+ .field("b", DataTypes.STRING())
+ .field("c", DataTypes.STRING())) \
+ .with_schema(Schema()
+ .field("a", DataTypes.BIGINT())
+ .field("b", DataTypes.STRING())
+ .field("c", DataTypes.STRING())) \
+ .register_table_sink("batch_sink")
+
+t.select("a + 1, b, c").insert_into("batch_sink")
+
+bt_env.exec_env().execute()
+
+with open(sink_path, 'r') as f:
+ lines = f.read()
+ assert lines == '2,hi,hello\n' + '3,hi,hello\n'
+
+print('pip_test_code.py success!')
diff --git a/flink-python/pyflink/version.py b/flink-python/dev/run_pip_test.sh
old mode 100644
new mode 100755
similarity index 93%
copy from flink-python/pyflink/version.py
copy to flink-python/dev/run_pip_test.sh
index ca27a42..0b674aa
--- a/flink-python/pyflink/version.py
+++ b/flink-python/dev/run_pip_test.sh
@@ -1,3 +1,4 @@
+#!/usr/bin/env bash
################################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -16,4 +17,6 @@
# limitations under the License.
################################################################################
-__version__ = "0.1.0"
+cd "$( dirname "$0" )"
+
+python pip_test_code.py
diff --git a/flink-python/pyflink/find_flink_home.py
b/flink-python/pyflink/find_flink_home.py
index 0491368..b75cc29 100644
--- a/flink-python/pyflink/find_flink_home.py
+++ b/flink-python/pyflink/find_flink_home.py
@@ -1,4 +1,5 @@
-################################################################################
+#!/usr/bin/env python
+#################################################################################
# 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
@@ -15,12 +16,21 @@
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################################
-
+import glob
import logging
import os
import sys
+def _is_flink_home(path):
+ pyflink_file = path + "/bin/pyflink-gateway-server.sh"
+ flink_dist_jar_file = path + "/lib/flink-dist*.jar"
+ if os.path.isfile(pyflink_file) and len(glob.glob(flink_dist_jar_file)) >
0:
+ return True
+ else:
+ return False
+
+
def _find_flink_home():
"""
Find the FLINK_HOME.
@@ -30,12 +40,23 @@ def _find_flink_home():
return os.environ['FLINK_HOME']
else:
try:
- flink_root_dir =
os.path.abspath(os.path.dirname(os.path.abspath(__file__)) + "/../../")
+ current_dir =
os.path.abspath(os.path.dirname(os.path.abspath(__file__)))
+ flink_root_dir = os.path.abspath(current_dir + "/../../")
build_target = flink_root_dir + "/build-target"
- pyflink_file = build_target + "/bin/pyflink-gateway-server.sh"
- if os.path.isfile(pyflink_file):
+ if _is_flink_home(build_target):
os.environ['FLINK_HOME'] = build_target
return build_target
+
+ if sys.version < "3":
+ import imp
+ module_home = imp.find_module("pyflink")[1]
+ else:
+ from importlib.util import find_spec
+ module_home = os.path.dirname(find_spec("pyflink").origin)
+
+ if _is_flink_home(module_home):
+ os.environ['FLINK_HOME'] = module_home
+ return module_home
except Exception:
pass
logging.error("Could not find valid FLINK_HOME(Flink distribution
directory) "
diff --git a/flink-python/pyflink/shell.py b/flink-python/pyflink/shell.py
index 9822c30..2ea3a6b 100644
--- a/flink-python/pyflink/shell.py
+++ b/flink-python/pyflink/shell.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
################################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -15,7 +16,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################################
+import codecs
import platform
+import sys
from pyflink.dataset import ExecutionEnvironment
from pyflink.datastream import StreamExecutionEnvironment
@@ -24,6 +27,11 @@ from pyflink.table.catalog import *
from pyflink.table.descriptors import *
from pyflink.table.window import *
+if sys.version > '3':
+ utf8_out = open(sys.stdout.fileno(), mode='w', encoding='utf8',
buffering=1)
+else:
+ utf8_out = codecs.getwriter("utf-8")(sys.stdout)
+
print("Using Python version %s (%s, %s)" % (
platform.python_version(),
platform.python_build()[0],
@@ -131,8 +139,8 @@ NOTE: Use the prebound Table Environment to implement batch
or streaming Table p
* t.select("a + 1, b, c").insert_into("stream_sink")
*
* st_env.exec_env().execute()
- '''
-print(welcome_msg)
+'''
+utf8_out.write(welcome_msg)
bt_env =
BatchTableEnvironment.create(ExecutionEnvironment.get_execution_environment())
diff --git a/flink-python/pyflink/version.py b/flink-python/pyflink/version.py
index ca27a42..1d1fb46 100644
--- a/flink-python/pyflink/version.py
+++ b/flink-python/pyflink/version.py
@@ -16,4 +16,8 @@
# limitations under the License.
################################################################################
-__version__ = "0.1.0"
+"""
+The pyflink version will be consistent with the flink version and follow the
PEP440.
+.. seealso:: https://www.python.org/dev/peps/pep-0440
+"""
+__version__ = "1.9.dev0"
diff --git a/flink-python/pyflink/version.py b/flink-python/setup.cfg
similarity index 93%
copy from flink-python/pyflink/version.py
copy to flink-python/setup.cfg
index ca27a42..138d2bd 100644
--- a/flink-python/pyflink/version.py
+++ b/flink-python/setup.cfg
@@ -16,4 +16,8 @@
# limitations under the License.
################################################################################
-__version__ = "0.1.0"
+[bdist_wheel]
+universal = 1
+
+[metadata]
+description-file = README.md
diff --git a/flink-python/setup.py b/flink-python/setup.py
index 906ebf9..ec7153e 100644
--- a/flink-python/setup.py
+++ b/flink-python/setup.py
@@ -20,6 +20,8 @@ from __future__ import print_function
import io
import os
import sys
+from shutil import copytree, copy, rmtree
+
from setuptools import setup
if sys.version_info < (2, 7):
@@ -42,31 +44,183 @@ VERSION = __version__ # noqa
with io.open(os.path.join(this_directory, 'README.md'), 'r', encoding='utf-8')
as f:
long_description = f.read()
-setup(
- name='pyflink',
- version=VERSION,
- packages=['pyflink',
- 'pyflink.table',
- 'pyflink.util',
- 'pyflink.datastream',
- 'pyflink.dataset',
- 'pyflink.common'],
- url='http://flink.apache.org',
- license='http://www.apache.org/licenses/LICENSE-2.0',
- author='Flink Developers',
- author_email='[email protected]',
- install_requires=['py4j==0.10.8.1', 'python-dateutil'],
- tests_require=['pytest==4.4.1'],
- description='Apache Flink Python API',
- long_description=long_description,
- long_description_content_type='text/markdown',
- classifiers=[
- 'Development Status :: 1 - Planning',
- 'License :: OSI Approved :: Apache Software License',
- 'Programming Language :: Python :: 2.7',
- 'Programming Language :: Python :: 3.3',
- 'Programming Language :: Python :: 3.4',
- 'Programming Language :: Python :: 3.5',
- 'Programming Language :: Python :: 3.6',
- 'Programming Language :: Python :: 3.7']
-)
+TEMP_PATH = "deps"
+
+LIB_TEMP_PATH = os.path.join(TEMP_PATH, "lib")
+OPT_TEMP_PATH = os.path.join(TEMP_PATH, "opt")
+CONF_TEMP_PATH = os.path.join(TEMP_PATH, "conf")
+LOG_TEMP_PATH = os.path.join(TEMP_PATH, "log")
+EXAMPLES_TEMP_PATH = os.path.join(TEMP_PATH, "examples")
+LICENSES_TEMP_PATH = os.path.join(TEMP_PATH, "licenses")
+PLUGINS_TEMP_PATH = os.path.join(TEMP_PATH, "plugins")
+SCRIPTS_TEMP_PATH = os.path.join(TEMP_PATH, "bin")
+
+LICENSE_FILE_TEMP_PATH = os.path.join("pyflink", "LICENSE")
+NOTICE_FILE_TEMP_PATH = os.path.join("pyflink", "NOTICE")
+README_FILE_TEMP_PATH = os.path.join("pyflink", "README.txt")
+
+in_flink_source =
os.path.isfile("../flink-java/src/main/java/org/apache/flink/api/java/"
+ "ExecutionEnvironment.java")
+
+try:
+ if in_flink_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_HOME = os.path.abspath("../build-target")
+
+ incorrect_invocation_message = """
+If you are installing pyflink from flink source, you must first build Flink and
+run sdist.
+
+ To build Flink with maven you can run:
+ mvn -DskipTests clean package
+ Building the source dist is done in the flink-python directory:
+ cd flink-python
+ python setup.py sdist
+ pip install dist/*.tar.gz"""
+
+ LIB_PATH = os.path.join(FLINK_HOME, "lib")
+ OPT_PATH = os.path.join(FLINK_HOME, "opt")
+ CONF_PATH = os.path.join(FLINK_HOME, "conf")
+ EXAMPLES_PATH = os.path.join(FLINK_HOME, "examples")
+ LICENSES_PATH = os.path.join(FLINK_HOME, "licenses")
+ PLUGINS_PATH = os.path.join(FLINK_HOME, "plugins")
+ SCRIPTS_PATH = os.path.join(FLINK_HOME, "bin")
+
+ LICENSE_FILE_PATH = os.path.join(FLINK_HOME, "LICENSE")
+ NOTICE_FILE_PATH = os.path.join(FLINK_HOME, "NOTICE")
+ README_FILE_PATH = os.path.join(FLINK_HOME, "README.txt")
+
+ if not os.path.isdir(LIB_PATH):
+ print(incorrect_invocation_message, file=sys.stderr)
+ sys.exit(-1)
+
+ if getattr(os, "symlink", None) is not None:
+ os.symlink(LIB_PATH, LIB_TEMP_PATH)
+ os.symlink(OPT_PATH, OPT_TEMP_PATH)
+ os.symlink(CONF_PATH, CONF_TEMP_PATH)
+ os.symlink(EXAMPLES_PATH, EXAMPLES_TEMP_PATH)
+ os.symlink(LICENSES_PATH, LICENSES_TEMP_PATH)
+ os.symlink(PLUGINS_PATH, PLUGINS_TEMP_PATH)
+ os.symlink(SCRIPTS_PATH, SCRIPTS_TEMP_PATH)
+ os.symlink(LICENSE_FILE_PATH, LICENSE_FILE_TEMP_PATH)
+ os.symlink(NOTICE_FILE_PATH, NOTICE_FILE_TEMP_PATH)
+ os.symlink(README_FILE_PATH, README_FILE_TEMP_PATH)
+ else:
+ copytree(LIB_PATH, LIB_TEMP_PATH)
+ copytree(OPT_PATH, OPT_TEMP_PATH)
+ copytree(CONF_PATH, CONF_TEMP_PATH)
+ copytree(EXAMPLES_PATH, EXAMPLES_TEMP_PATH)
+ copytree(LICENSES_PATH, LICENSES_TEMP_PATH)
+ copytree(PLUGINS_PATH, PLUGINS_TEMP_PATH)
+ copytree(SCRIPTS_PATH, SCRIPTS_TEMP_PATH)
+ copy(LICENSE_FILE_PATH, LICENSE_FILE_TEMP_PATH)
+ copy(NOTICE_FILE_PATH, NOTICE_FILE_TEMP_PATH)
+ copy(README_FILE_PATH, README_FILE_TEMP_PATH)
+ os.mkdir(LOG_TEMP_PATH)
+ with open(os.path.join(LOG_TEMP_PATH, "empty.txt"), 'w') as f:
+ f.write("This file is used to force setuptools to include the log
directory. "
+ "You can delete it at any time after installation.")
+ else:
+ if not os.path.isdir(LIB_TEMP_PATH) or not
os.path.isdir(OPT_TEMP_PATH) \
+ or not os.path.isdir(SCRIPTS_TEMP_PATH):
+ print("The flink core files are not found. Please make sure your
installation package "
+ "is complete, or do this in the flink-python directory of
the flink source "
+ "directory.")
+ sys.exit(-1)
+
+ script_names = ["pyflink-shell.sh", "find-flink-home.sh"]
+ scripts = [os.path.join(SCRIPTS_TEMP_PATH, script) for script in
script_names]
+ scripts.append("pyflink/find_flink_home.py")
+
+ setup(
+ name='pyflink',
+ version=VERSION,
+ packages=['pyflink',
+ 'pyflink.table',
+ 'pyflink.util',
+ 'pyflink.datastream',
+ 'pyflink.dataset',
+ 'pyflink.common',
+ 'pyflink.lib',
+ 'pyflink.opt',
+ 'pyflink.conf',
+ 'pyflink.log',
+ 'pyflink.examples',
+ 'pyflink.licenses',
+ 'pyflink.plugins',
+ 'pyflink.bin'],
+ include_package_data=True,
+ package_dir={
+ 'pyflink.lib': TEMP_PATH + '/lib',
+ 'pyflink.opt': TEMP_PATH + '/opt',
+ 'pyflink.conf': TEMP_PATH + '/conf',
+ 'pyflink.log': TEMP_PATH + '/log',
+ 'pyflink.examples': TEMP_PATH + '/examples',
+ 'pyflink.licenses': TEMP_PATH + '/licenses',
+ 'pyflink.plugins': TEMP_PATH + '/plugins',
+ 'pyflink.bin': TEMP_PATH + '/bin'
+ },
+ package_data={
+ 'pyflink': ['LICENSE', 'NOTICE', 'README.txt'],
+ 'pyflink.lib': ['*.jar'],
+ 'pyflink.opt': ['*', '*/*'],
+ 'pyflink.conf': ['*'],
+ 'pyflink.log': ['*'],
+ 'pyflink.examples': ['*.py', '*/*.py'],
+ 'pyflink.licenses': ['*'],
+ 'pyflink.plugins': ['*', '*/*'],
+ 'pyflink.bin': ['*']
+ },
+ scripts=scripts,
+ url='http://flink.apache.org',
+ license='http://www.apache.org/licenses/LICENSE-2.0',
+ author='Flink Developers',
+ author_email='[email protected]',
+ install_requires=['py4j==0.10.8.1', 'python-dateutil'],
+ tests_require=['pytest==4.4.1'],
+ description='Apache Flink Python API',
+ long_description=long_description,
+ long_description_content_type='text/markdown',
+ classifiers=[
+ 'Development Status :: 1 - Planning',
+ 'License :: OSI Approved :: Apache Software License',
+ 'Programming Language :: Python :: 2.7',
+ 'Programming Language :: Python :: 3.3',
+ 'Programming Language :: Python :: 3.4',
+ 'Programming Language :: Python :: 3.5',
+ 'Programming Language :: Python :: 3.6',
+ 'Programming Language :: Python :: 3.7']
+ )
+finally:
+ if in_flink_source:
+ if getattr(os, "symlink", None) is not None:
+ os.remove(LIB_TEMP_PATH)
+ os.remove(OPT_TEMP_PATH)
+ os.remove(CONF_TEMP_PATH)
+ os.remove(EXAMPLES_TEMP_PATH)
+ os.remove(LICENSES_TEMP_PATH)
+ os.remove(PLUGINS_TEMP_PATH)
+ os.remove(SCRIPTS_TEMP_PATH)
+ os.remove(LICENSE_FILE_TEMP_PATH)
+ os.remove(NOTICE_FILE_TEMP_PATH)
+ os.remove(README_FILE_TEMP_PATH)
+ else:
+ rmtree(LIB_TEMP_PATH)
+ rmtree(OPT_TEMP_PATH)
+ rmtree(CONF_TEMP_PATH)
+ rmtree(EXAMPLES_TEMP_PATH)
+ rmtree(LICENSES_TEMP_PATH)
+ rmtree(PLUGINS_TEMP_PATH)
+ rmtree(SCRIPTS_TEMP_PATH)
+ os.remove(LICENSE_FILE_TEMP_PATH)
+ os.remove(NOTICE_FILE_TEMP_PATH)
+ os.remove(README_FILE_TEMP_PATH)
+ rmtree(LOG_TEMP_PATH)
+ os.rmdir(TEMP_PATH)
diff --git a/flink-python/tox.ini b/flink-python/tox.ini
index dbfc4e9..8c56f8f 100644
--- a/flink-python/tox.ini
+++ b/flink-python/tox.ini
@@ -24,12 +24,15 @@
envlist = py27, py33, py34, py35, py36, py37
[testenv]
+whitelist_externals=
+ /bin/bash
deps =
pytest
commands =
python --version
python setup.py install --force
pytest
+ bash ./dev/run_pip_test.sh
[flake8]
# We follow PEP 8 (https://www.python.org/dev/peps/pep-0008/) with one
exception: lines can be
diff --git a/tools/releasing/update_branch_version.sh
b/tools/releasing/update_branch_version.sh
index 6f00093..bc0a0c4 100755
--- a/tools/releasing/update_branch_version.sh
+++ b/tools/releasing/update_branch_version.sh
@@ -57,6 +57,12 @@ perl -pi -e "s#^version: .*#version: \"${NEW_VERSION}\"#"
_config.yml
perl -pi -e "s#^version_title: .*#version_title: \"${NEW_VERSION}\"#"
_config.yml
cd ..
+#change version of pyflink
+cd flink-python/pyflink
+perl -pi -e "s#^__version__ = \".*\"#__version__ = \"${NEW_VERSION}\"#"
version.py
+perl -pi -e "s#-SNAPSHOT#\\.dev0#" version.py
+cd ../..
+
git commit -am "Update version to $NEW_VERSION"
echo "Don't forget to push the change."