1
0
mirror of https://github.com/balkian/balkian.github.com.git synced 2024-11-14 15:42:28 +00:00
balkian.github.com/content/2014-09-23-publishing-in-pypi.rst
J. Fernando Sánchez 04c716e212 Migrated to Pelican
Now tags have pages, and all other visual goodies :)
2015-01-22 23:37:23 +01:00

107 lines
3.5 KiB
ReStructuredText

Publishing in PyPi
##################
:date: 2014-09-27 10:00:00
:tags: github, python, pypi
Developing a python module and publishing it on Github is cool, but most
of the times you want others to download and use it easily. That is the
role of PyPi, the python package repository. In this post I show you how
to publish your package in less than 10 minutes.
Choose a fancy name
-------------------
If you haven't done so yet, take a minute or two to think about this. To
publish on PyPi you need a name for your package that isn't taken.
What's more, a catchy and unique name will help people remember your
module and feel more inclined to at least try it.
The package name should hint what your module does, but that's not
always the case. That's your call. I personally put uniqueness and
memorability over describing the functionality.
Create a .pypirc configuration file
-----------------------------------
.. code:: cfg
[distutils] # this tells distutils what package indexes you can push to
index-servers =
pypi # the live PyPI
pypitest # test PyPI
[pypi] # authentication details for live PyPI
repository = https://pypi.python.org/pypi
username = { your_username }
password = { your_password } # not necessary
[pypitest] # authentication details for test PyPI
repository = https://testpypi.python.org/pypi
username = { your_username }
As you can see, you need to register both in the `main pypi
repository <https://pypi.python.org/pypi?%3Aaction=register_form>`__ and
the `testing
server <https://testpypi.python.org/pypi?%3Aaction=register_form>`__.
The usernames and passwords might be different, that is up to you!
Prepare your package
--------------------
::
root-dir/ # Any name you want
setup.py
setup.cfg
LICENSE.txt
README.md
mypackage/
__init__.py
foo.py
bar.py
baz.py
setup.cfg
~~~~~~~~~
.. code:: cfg
[metadata]
description-file = README.md
The markdown README is the *de facto* standard in Github, but you can
also use rST (reStructuredText), the standard in the python community.
setup.py
~~~~~~~~
{% highlight python %} from distutils.core import setup setup( name =
'mypackage', packages = ['mypackage'], # this must be the same as the
name above version = '{ version }', description = '{ description }',
author = '{ name }', author\_email = '{ email }', url =
'https://github.com/{user}/{package}', # URL to the github repo
download\_url = 'https://github.com/{user}/{repo}/tarball/{version}',
keywords = ['websockets', 'display', 'd3'], # list of keywords that
represent your package classifiers = [], ) {% endhighlight %}
You might notice that the download\_url points to a Github URL. We could
host our package anywhere, but Github is a convenient option. To create
the tarball and the zip packages, you only need to tag a tag in your
repository and push it to github:
::
git tag {version} -m "{ Description of this tag/version}"
git push --tags origin master
Push to the testing/main pypi server
------------------------------------
It is advisable that you try your package on the test repository and fix
any problems first. The process is simple:
``python setup.py register -r {pypitest/pypi} python setup.py sdist upload -r {pypitest/pypi}``
If everything went as expected, you can now install your package through
pip and browse your package's page. For instance, check my senpy
package: https://pypi.python.org/pypi/senpy ``pip install senpy``