This article is a translation of this article, originally written by aodag in Japanese. I translated it with his permission. This article is aimed to know simple ways to prepare internal Python package host like a local gem server on Ruby.
- Include your packages in your git repository
- Publish a directory including your packages via HTTP server
- Build a local PyPI-equivalent server
It is a high-cost way to create a local PyPI-equivalent server (translator note: like devpi), and I don’t think there is no need to do so, I will describe first two options.
Include your packages in your Git repository
If your packages are required for a particular project, it is straightforward to contain them in the Git repository. You can put them in the directory named
wheelhouse, which comes from the name of the previous default directory created by
pip wheel. (translator note: this method is assumed you to know wheel. If not, this story and this JIRA would be helpful.)If you put the private package
foo in the
wheelhouse, you can install as follows:
$ pip install foo -f wheelhouse
-f is the short option for
--find-links, with that option, pip will search packages in the directory first, then fall back to
Publish a directory including your packages via HTTP server
We can use
--find-link option to search not only local directory but also a remote server via
http. If you have a package used by multiple projects, this method will help you.
The easiest way to distribute your packages with this method is executing
python -m http.server with Python 3.x (or
python -m SimpleHTTPServer with Python 2.7) on the
wheelhouse directory. This simple server provides directory listings so that we can just use
--find-links to use the directory. Make sure to open
http://localhost:8000 that you can see the list of files under the
wheelhouse directory via a web browser.
foo package via HTTP server you launched, you can execute as follows:
$ pip install foo -f http://localhost:8000
Since this is a simple server, for production, it is good to put them in cloud storage such as AWS S3, you should check the way for directory listings, or you can use Apache with
I recommend these methods because they are simple and no need to prepare the dedicated application server.