Merge pull request #1154 from soltanmm/pypi
Enable PyPI package management
diff --git a/src/python/README.md b/src/python/README.md
index c8057be..82bc776 100644
--- a/src/python/README.md
+++ b/src/python/README.md
@@ -42,7 +42,14 @@
Installing
-----------------------
-- [Install the gRPC core](https://github.com/grpc/grpc/blob/master/INSTALL)
+- Install the gRPC core
+ - [Debian package](https://github.com/grpc/grpc/releases)
+ ```
+ $ wget https://github.com/grpc/grpc/releases/download/release-0_5_0/libgrpc_0.5.0_amd64.deb
+ $ wget https://github.com/grpc/grpc/releases/download/release-0_5_0/libgrpc-dev_0.5.0_amd64.deb
+ $ sudo dpkg -i libgrpc_0.5.0_amd64.deb libgrpc-dev_0.5.0_amd64.deb
+ ```
+ - [From source](https://github.com/grpc/grpc/blob/master/INSTALL)
- Install gRPC Python's dependencies
```
@@ -53,3 +60,16 @@
```
$ pip install src/python/src
```
+
+Packaging to PyPI
+-----------------------
+
+- Install packaging dependencies
+```
+$ pip install setuptools twine
+```
+
+- Push to PyPI
+```
+$ ../../tools/distrib/python/submit.py
+```
diff --git a/src/python/interop/setup.py b/src/python/interop/setup.py
index 6db5435..7a32992 100644
--- a/src/python/interop/setup.py
+++ b/src/python/interop/setup.py
@@ -29,7 +29,7 @@
"""A setup module for the GRPC Python interop testing package."""
-from distutils import core as _core
+import setuptools
_PACKAGES = (
'interop',
@@ -45,9 +45,13 @@
'credentials/server1.pem',]
}
-_INSTALL_REQUIRES = ['grpc-2015>=0.0.1']
+_INSTALL_REQUIRES = ['grpcio>=0.4.0a4']
-_core.setup(
- name='interop', version='0.0.1', packages=_PACKAGES,
- package_dir=_PACKAGE_DIRECTORIES, package_data=_PACKAGE_DATA,
- install_requires=_INSTALL_REQUIRES)
+setuptools.setup(
+ name='interop',
+ version='0.0.1',
+ packages=_PACKAGES,
+ package_dir=_PACKAGE_DIRECTORIES,
+ package_data=_PACKAGE_DATA,
+ install_requires=_INSTALL_REQUIRES
+)
diff --git a/src/python/src/.gitignore b/src/python/src/.gitignore
new file mode 100644
index 0000000..bc15a52
--- /dev/null
+++ b/src/python/src/.gitignore
@@ -0,0 +1,3 @@
+MANIFEST
+grpcio.egg-info/
+dist/
diff --git a/src/python/src/MANIFEST.in b/src/python/src/MANIFEST.in
new file mode 100644
index 0000000..6f32db0
--- /dev/null
+++ b/src/python/src/MANIFEST.in
@@ -0,0 +1 @@
+graft grpc
diff --git a/src/python/src/README.rst b/src/python/src/README.rst
new file mode 100644
index 0000000..bc1815f
--- /dev/null
+++ b/src/python/src/README.rst
@@ -0,0 +1,27 @@
+gRPC Python
+===========
+
+Package for GRPC Python.
+
+Dependencies
+------------
+
+Ensure that you have installed GRPC core.
+
+On debian linux systems, install from our released deb package:
+
+::
+
+ $ wget https://github.com/grpc/grpc/releases/download/release-0_5_0/libgrpc_0.5.0_amd64.deb
+ $ wget https://github.com/grpc/grpc/releases/download/release-0_5_0/libgrpc-dev_0.5.0_amd64.deb
+ $ sudo dpkg -i libgrpc_0.5.0_amd64.deb libgrpc-dev_0.5.0_amd64.deb
+
+Otherwise, install from source:
+
+::
+
+ git clone https://github.com/grpc/grpc.git
+ cd grpc
+ ./configure
+ make && make install
+
diff --git a/src/python/src/setup.py b/src/python/src/setup.py
index bd70634..a6924b2 100644
--- a/src/python/src/setup.py
+++ b/src/python/src/setup.py
@@ -30,6 +30,7 @@
"""A setup module for the GRPC Python package."""
from distutils import core as _core
+import setuptools
_EXTENSION_SOURCES = (
'grpc/_adapter/_c.c',
@@ -80,7 +81,15 @@
'grpc.framework': 'grpc/framework',
}
-_core.setup(
- name='grpc-2015', version='0.4.0',
- ext_modules=[_EXTENSION_MODULE], packages=list(_PACKAGES),
- package_dir=_PACKAGE_DIRECTORIES)
+setuptools.setup(
+ name='grpcio',
+ version='0.4.0a8',
+ ext_modules=[_EXTENSION_MODULE],
+ packages=list(_PACKAGES),
+ package_dir=_PACKAGE_DIRECTORIES,
+ install_requires=[
+ 'enum34==1.0.4',
+ 'futures==2.2.0',
+ 'protobuf==3.0.0-alpha-1'
+ ]
+)
diff --git a/tools/distrib/python/submit.py b/tools/distrib/python/submit.py
new file mode 100755
index 0000000..5d8a917
--- /dev/null
+++ b/tools/distrib/python/submit.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+
+import argparse
+import os
+import shutil
+import subprocess
+
+parser = argparse.ArgumentParser(
+ description='Submit the package to a PyPI repository.')
+parser.add_argument(
+ '--repository', '-r', metavar='r', type=str, default='pypi',
+ help='The repository to push the package to. '
+ 'Ensure the value appears in your .pypirc file. '
+ 'Defaults to "pypi".'
+)
+parser.add_argument(
+ '--identity', '-i', metavar='i', type=str,
+ help='GPG identity to sign the files with.'
+)
+parser.add_argument(
+ '--username', '-u', metavar='u', type=str,
+ help='Username to authenticate with the repository. Not needed if you have '
+ 'configured your .pypirc to include your username.'
+)
+parser.add_argument(
+ '--password', '-p', metavar='p', type=str,
+ help='Password to authenticate with the repository. Not needed if you have '
+ 'configured your .pypirc to include your password.'
+)
+args = parser.parse_args()
+
+# Move to the root directory of Python GRPC.
+pkgdir = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+ '../../../src/python/src')
+# Remove previous distributions; they somehow confuse twine.
+try:
+ shutil.rmtree(os.path.join(pkgdir, 'dist/'))
+except:
+ pass
+
+# Make the push.
+cmd = ['python', 'setup.py', 'sdist']
+subprocess.call(cmd)
+
+cmd = ['twine', 'upload', '-r', args.repository]
+if args.identity is not None:
+ cmd.extend(['-i', args.identity])
+if args.username is not None:
+ cmd.extend(['-u', args.username])
+if args.password is not None:
+ cmd.extend(['-p', args.password])
+cmd.append('dist/*')
+
+subprocess.call(cmd, cwd=pkgdir)