We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
`pip install kfp` does not install CLI
**What happened:**

```
$ virtualenv .venv
...
$ pip install kfp==0.1.23
...
$ kfp
Traceback (most recent call last):
  File "/private/tmp/.venv/bin/kfp", line 6, in <module>
    from kfp.__main__ import main
  File "/private/tmp/.venv/lib/python3.7/site-packages/kfp/__main__.py", line 15, in <module>
    from .cli.cli import main
ModuleNotFoundError: No module named 'kfp.cli'
```

**What did you expect to happen:**
To run the CLI.

**Anything else you would like to add:**
I could be confused about what is expected to be available after installing the kfp package from pip - setup.py mentions an entrypoint named kfp in 

https://github.com/kubeflow/pipelines/blob/812ca7f8836c47039c3b1f3daf23e68fbcee1a92/sdk/python/setup.py#L74

but main.py imports a `kfp.cli` package https://github.com/kubeflow/pipelines/blob/812ca7f8836c47039c3b1f3daf23e68fbcee1a92/sdk/python/kfp/__main__.py#L15

which is not included in the distribution https://github.com/kubeflow/pipelines/blob/812ca7f8836c47039c3b1f3daf23e68fbcee1a92/sdk/python/setup.py#L46-L54


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `sdk/python/setup.py`
Content:
```
1 # Copyright 2018 Google LLC
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 
15 from setuptools import setup
16 
17 NAME = 'kfp'
18 VERSION = '0.1.24'
19 
20 REQUIRES = [
21     'urllib3>=1.15,<1.25', #Fixing the version conflict with the "requests" package
22     'six >= 1.10',
23     'certifi',
24     'python-dateutil',
25     'PyYAML',
26     'google-cloud-storage>=1.13.0',
27     'kubernetes>=8.0.0, <=9.0.0',
28     'PyJWT>=1.6.4',
29     'cryptography>=2.4.2',
30     'google-auth>=1.6.1',
31     'requests_toolbelt>=0.8.0',
32     'cloudpickle',
33     'kfp-server-api >= 0.1.18, < 0.1.19', #Update the upper version whenever a new version of the kfp-server-api package is released. Update the lower version when there is a breaking change in kfp-server-api.
34     'argo-models == 2.2.1a',  #2.2.1a is equivalent to argo 2.2.1
35     'jsonschema >= 3.0.1',
36     'tabulate == 0.8.3',
37     'click == 7.0'
38 ]
39 
40 setup(
41     name=NAME,
42     version=VERSION,
43     description='KubeFlow Pipelines SDK',
44     author='google',
45     install_requires=REQUIRES,
46     packages=[
47         'kfp',
48         'kfp.compiler',
49         'kfp.components',
50         'kfp.components.structures',
51         'kfp.components.structures.kubernetes',
52         'kfp.dsl',
53         'kfp.notebook',
54     ],
55     classifiers=[
56         'Intended Audience :: Developers',
57         'Intended Audience :: Education',
58         'Intended Audience :: Science/Research',
59         'License :: OSI Approved :: Apache Software License',
60         'Programming Language :: Python :: 3',
61         'Programming Language :: Python :: 3.5',
62         'Programming Language :: Python :: 3.6',
63         'Programming Language :: Python :: 3.7',
64         'Topic :: Scientific/Engineering',
65         'Topic :: Scientific/Engineering :: Artificial Intelligence',
66         'Topic :: Software Development',
67         'Topic :: Software Development :: Libraries',
68         'Topic :: Software Development :: Libraries :: Python Modules',
69     ],
70     python_requires='>=3.5.3',
71     include_package_data=True,
72     entry_points={'console_scripts': [
73         'dsl-compile = kfp.compiler.main:main',
74         'kfp=kfp.__main__:main']})
75
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/sdk/python/setup.py b/sdk/python/setup.py
--- a/sdk/python/setup.py
+++ b/sdk/python/setup.py
@@ -45,6 +45,7 @@
     install_requires=REQUIRES,
     packages=[
         'kfp',
+        'kfp.cli',
         'kfp.compiler',
         'kfp.components',
         'kfp.components.structures',

{"golden_diff": "diff --git a/sdk/python/setup.py b/sdk/python/setup.py\n--- a/sdk/python/setup.py\n+++ b/sdk/python/setup.py\n@@ -45,6 +45,7 @@\n     install_requires=REQUIRES,\n     packages=[\n         'kfp',\n+        'kfp.cli',\n         'kfp.compiler',\n         'kfp.components',\n         'kfp.components.structures',\n", "issue": "`pip install kfp` does not install CLI\n**What happened:**\r\n\r\n```\r\n$ virtualenv .venv\r\n...\r\n$ pip install kfp==0.1.23\r\n...\r\n$ kfp\r\nTraceback (most recent call last):\r\n  File \"/private/tmp/.venv/bin/kfp\", line 6, in <module>\r\n    from kfp.__main__ import main\r\n  File \"/private/tmp/.venv/lib/python3.7/site-packages/kfp/__main__.py\", line 15, in <module>\r\n    from .cli.cli import main\r\nModuleNotFoundError: No module named 'kfp.cli'\r\n```\r\n\r\n**What did you expect to happen:**\r\nTo run the CLI.\r\n\r\n**Anything else you would like to add:**\r\nI could be confused about what is expected to be available after installing the kfp package from pip - setup.py mentions an entrypoint named kfp in \r\n\r\nhttps://github.com/kubeflow/pipelines/blob/812ca7f8836c47039c3b1f3daf23e68fbcee1a92/sdk/python/setup.py#L74\r\n\r\nbut main.py imports a `kfp.cli` package https://github.com/kubeflow/pipelines/blob/812ca7f8836c47039c3b1f3daf23e68fbcee1a92/sdk/python/kfp/__main__.py#L15\r\n\r\nwhich is not included in the distribution https://github.com/kubeflow/pipelines/blob/812ca7f8836c47039c3b1f3daf23e68fbcee1a92/sdk/python/setup.py#L46-L54\r\n\n", "before_files": [{"content": "# Copyright 2018 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom setuptools import setup\n\nNAME = 'kfp'\nVERSION = '0.1.24'\n\nREQUIRES = [\n    'urllib3>=1.15,<1.25', #Fixing the version conflict with the \"requests\" package\n    'six >= 1.10',\n    'certifi',\n    'python-dateutil',\n    'PyYAML',\n    'google-cloud-storage>=1.13.0',\n    'kubernetes>=8.0.0, <=9.0.0',\n    'PyJWT>=1.6.4',\n    'cryptography>=2.4.2',\n    'google-auth>=1.6.1',\n    'requests_toolbelt>=0.8.0',\n    'cloudpickle',\n    'kfp-server-api >= 0.1.18, < 0.1.19', #Update the upper version whenever a new version of the kfp-server-api package is released. Update the lower version when there is a breaking change in kfp-server-api.\n    'argo-models == 2.2.1a',  #2.2.1a is equivalent to argo 2.2.1\n    'jsonschema >= 3.0.1',\n    'tabulate == 0.8.3',\n    'click == 7.0'\n]\n\nsetup(\n    name=NAME,\n    version=VERSION,\n    description='KubeFlow Pipelines SDK',\n    author='google',\n    install_requires=REQUIRES,\n    packages=[\n        'kfp',\n        'kfp.compiler',\n        'kfp.components',\n        'kfp.components.structures',\n        'kfp.components.structures.kubernetes',\n        'kfp.dsl',\n        'kfp.notebook',\n    ],\n    classifiers=[\n        'Intended Audience :: Developers',\n        'Intended Audience :: Education',\n        'Intended Audience :: Science/Research',\n        'License :: OSI Approved :: Apache Software License',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.5',\n        'Programming Language :: Python :: 3.6',\n        'Programming Language :: Python :: 3.7',\n        'Topic :: Scientific/Engineering',\n        'Topic :: Scientific/Engineering :: Artificial Intelligence',\n        'Topic :: Software Development',\n        'Topic :: Software Development :: Libraries',\n        'Topic :: Software Development :: Libraries :: Python Modules',\n    ],\n    python_requires='>=3.5.3',\n    include_package_data=True,\n    entry_points={'console_scripts': [\n        'dsl-compile = kfp.compiler.main:main',\n        'kfp=kfp.__main__:main']})\n", "path": "sdk/python/setup.py"}], "after_files": [{"content": "# Copyright 2018 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nfrom setuptools import setup\n\nNAME = 'kfp'\nVERSION = '0.1.24'\n\nREQUIRES = [\n    'urllib3>=1.15,<1.25', #Fixing the version conflict with the \"requests\" package\n    'six >= 1.10',\n    'certifi',\n    'python-dateutil',\n    'PyYAML',\n    'google-cloud-storage>=1.13.0',\n    'kubernetes>=8.0.0, <=9.0.0',\n    'PyJWT>=1.6.4',\n    'cryptography>=2.4.2',\n    'google-auth>=1.6.1',\n    'requests_toolbelt>=0.8.0',\n    'cloudpickle',\n    'kfp-server-api >= 0.1.18, < 0.1.19', #Update the upper version whenever a new version of the kfp-server-api package is released. Update the lower version when there is a breaking change in kfp-server-api.\n    'argo-models == 2.2.1a',  #2.2.1a is equivalent to argo 2.2.1\n    'jsonschema >= 3.0.1',\n    'tabulate == 0.8.3',\n    'click == 7.0'\n]\n\nsetup(\n    name=NAME,\n    version=VERSION,\n    description='KubeFlow Pipelines SDK',\n    author='google',\n    install_requires=REQUIRES,\n    packages=[\n        'kfp',\n        'kfp.cli',\n        'kfp.compiler',\n        'kfp.components',\n        'kfp.components.structures',\n        'kfp.components.structures.kubernetes',\n        'kfp.dsl',\n        'kfp.notebook',\n    ],\n    classifiers=[\n        'Intended Audience :: Developers',\n        'Intended Audience :: Education',\n        'Intended Audience :: Science/Research',\n        'License :: OSI Approved :: Apache Software License',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.5',\n        'Programming Language :: Python :: 3.6',\n        'Programming Language :: Python :: 3.7',\n        'Topic :: Scientific/Engineering',\n        'Topic :: Scientific/Engineering :: Artificial Intelligence',\n        'Topic :: Software Development',\n        'Topic :: Software Development :: Libraries',\n        'Topic :: Software Development :: Libraries :: Python Modules',\n    ],\n    python_requires='>=3.5.3',\n    include_package_data=True,\n    entry_points={'console_scripts': [\n        'dsl-compile = kfp.compiler.main:main',\n        'kfp=kfp.__main__:main']})\n", "path": "sdk/python/setup.py"}]}