ย
PyPI โ the Python Package Index
The Python Package Index is a repository of software for the Python programming language. There are currently 48101 packages here.
The packages pushed to PyPI can be easily installed usingย pip
.
To push a package to PyPI following are required:
- Your package.
- README
- .pypirc configuration file.
- Accounts onย PyPI Liveย and PyPi Test.
- LICENSE.txt. I used this.
- setup.py
- requirements.txt.ย If your package needs something to be installed first.
This is how work tree should look like,
your_package_name -version/ setup.py README.txt README.md requirements.txt CHANGES.txt LICENSE.txt your_package_name/ bob.py alice.py __init.py__
setup.py
This is the metadata about your library. My setup.py here.
from setuptools import setup #I used setuptools, you can use dist.core setup( name='<your_package_name>', version='<version>', description='<Some sort of description explaining what you are doing>', author='<Ooh! your_name here>', author_email='<your_email_id>', url='<url>', packages=['<your_package_name>'], install_requires=[ "some_package == version", #package to install to make your package work. ] )
.pypirc configuration file
This holds the information to authenticate you with PyPI placed inside home directory.
[distutils] # this tells distutils what package indexes you can push to index-servers = pypi # the live PyPI test # test PyPI [test] # authentication details for test PyPI repository = https://testpypi.python.org/pypi username = <your_user_name> password = <your_password> [pypi] # authentication details for live PyPI repository = https://pypi.python.org/pypi username = <your_user_name> password = <your_password>
requirements.txt
This has the packages to be installed to make your package work. My requirements.txt looks like this :
beautifulsoup4==4.3.2
as I needed bs4 to be installed to make my package work. Here it is.
Register your package to PyPI test server:
python setup.py register -r test #Mine gave me this running register running egg_info creating horoscope.egg-info writing requirements to horoscope.egg-info/requires.txt writing horoscope.egg-info/PKG-INFO writing top-level names to horoscope.egg-info/top_level.txt writing dependency_links to horoscope.egg-info/dependency_links.txt writing manifest file 'horoscope.egg-info/SOURCES.txt' reading manifest file 'horoscope.egg-info/SOURCES.txt' writing manifest file 'horoscope.egg-info/SOURCES.txt' Registering horoscope to https://testpypi.python.org/pypi Server response (200): OK #Listing the stuff tapasweni@Tapasweni:~/horoscope-0.1.0$ ls CHANGES.txt ย horoscope.egg-info ย README ย requirements.txt horoscope ย LICENSE.txt ย README.md ย setup.py
then upload to the server:
python setup.py sdist upload -r test #Mine gave me this running sdist running egg_info writing requirements to horoscope.egg-info/requires.txt writing horoscope.egg-info/PKG-INFO writing top-level names to horoscope.egg-info/top_level.txt writing dependency_links to horoscope.egg-info/dependency_links.txt reading manifest file 'horoscope.egg-info/SOURCES.txt' writing manifest file 'horoscope.egg-info/SOURCES.txt' creating horoscope-0.1.0 creating horoscope-0.1.0/horoscope creating horoscope-0.1.0/horoscope.egg-info making hard links in horoscope-0.1.0... hard linking README -> horoscope-0.1.0 hard linking setup.py -> horoscope-0.1.0 hard linking horoscope/__init__.py -> horoscope-0.1.0/horoscope hard linking horoscope/pyhoroscope.py -> horoscope-0.1.0/horoscope hard linking horoscope.egg-info/PKG-INFO -> horoscope-0.1.0/horoscope.egg-info hard linking horoscope.egg-info/SOURCES.txt -> horoscope-0.1.0/horoscope.egg-info hard linking horoscope.egg-info/dependency_links.txt -> horoscope-0.1.0/horoscope.egg-info hard linking horoscope.egg-info/requires.txt -> horoscope-0.1.0/horoscope.egg-info hard linking horoscope.egg-info/top_level.txt -> horoscope-0.1.0/horoscope.egg-info Writing horoscope-0.1.0/setup.cfg creating dist tar -cf dist/horoscope-0.1.0.tar horoscope-0.1.0 gzip -f9 dist/horoscope-0.1.0.tar removing 'horoscope-0.1.0' (and everything under it) running upload Submitting dist/horoscope-0.1.0.tar.gz to https://testpypi.python.org/pypi Server response (200): OK
It can be tested by installing the package from PyPI test server
pip install -i test <your_package_name>
If you testing works with package on PyPI test, the next steps are to register and upload it to PyPI live.
python setup.py register -r pypi python setup.py sdist upload -r pypi #Now you can pip install it. pip install your_package_name
All packages can be foundย here.
ย