Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wolever/pip2pi
pip2pi builds a PyPI-compatible package repository from pip requirements
https://github.com/wolever/pip2pi
Last synced: 16 days ago
JSON representation
pip2pi builds a PyPI-compatible package repository from pip requirements
- Host: GitHub
- URL: https://github.com/wolever/pip2pi
- Owner: wolever
- License: other
- Created: 2011-12-21T20:26:45.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2022-07-09T06:17:02.000Z (over 2 years ago)
- Last Synced: 2024-09-23T01:58:57.824Z (about 1 month ago)
- Language: Python
- Homepage:
- Size: 249 KB
- Stars: 753
- Watchers: 27
- Forks: 96
- Open Issues: 43
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.txt
- License: LICENSE.txt
Awesome Lists containing this project
- starred-awesome - pip2pi - pip2pi builds a PyPI-compatible package repository from pip requirements (Python)
README
``pip2pi`` builds a PyPI-compatible package repository from ``pip`` requirements
================================================================================.. image:: https://travis-ci.org/wolever/pip2pi.png?branch=master
:target: https://travis-ci.org/wolever/pip2piPyPI can go down, package maintainers can remove old tarballs, and downloading
tarballs can take a long time. ``pip2pi`` helps to alleviate these problems by
making it blindingly simple to maintain a PyPI-compatible repository of packages
your software depends on.::
$ pip2pi --help
Usage: pip2pi TARGET [PIP_OPTIONS] PACKAGES ...Adds packages PACKAGES to PyPI-compatible package index at TARGET.
If TARGET contains ':' it will be treated as a remote path. The
package index will be built locally and rsync will be used to copy
it to the remote host.PIP_OPTIONS can be any options accepted by `pip install -d`, like
`--index-url` or `--no-use-wheel`.For example, to create a remote index:
$ pip2pi example.com:/var/www/packages/ -r requirements.txt
To create a local index:
$ pip2pi ~/Sites/packages/ foo==1.2
To pass arguments to pip:
$ pip2pi ~/Sites/packages/ \
--index-url https://example.com/simple \
--no-use-wheel \
-r requirements-base.txt \
-r requirements-dev.txt \
bar==3.1Requirements
------------0. ``pip``
1. A ``requirements.txt`` file for your project (optional, but useful)
2. An HTTP server (optional, but useful)Setup
-----Install ``pip2pi``::
$ pip install pip2pi
And create the directory which will contain the tarballs of required packages,
preferably somewhere under your web server's document root::$ mkdir /var/www/packages/
Mirroring Packages
------------------To mirror a package and all of its requirements, use ``pip2tgz``::
$ pip2tgz packages/ foo==1.2
...
$ ls packages/
foo-1.2.tar.gz
bar-0.8.tar.gzNote that ``pip2tgz`` passes package arguments directly to ``pip``, so packages
can be specified in any format that ``pip`` recognizes::$ cat requirements.txt
foo==1.2
http://example.com/baz-0.3.tar.gz
$ pip2tgz packages/ -r requirements.txt bam-2.3/
...
$ ls packages/
foo-1.2.tar.gz
bar-0.8.tar.gz
baz-0.3.tar.gz
bam-2.3.tar.gzBuilding a Package Index
------------------------A directory full of ``.tar.gz`` files can be turned into PyPI-compatible
"simple" package index using the ``dir2pi`` command::$ ls packages/
bar-0.8.tar.gz
baz-0.3.tar.gz
foo-1.2.tar.gz
$ dir2pi packages/
$ find packages/
packages/
packages/bar-0.8.tar.gz
packages/baz-0.3.tar.gz
packages/foo-1.2.tar.gz
packages/simple
packages/simple/bar
packages/simple/bar/bar-0.8.tar.gz
packages/simple/baz
packages/simple/baz/baz-0.3.tar.gz
packages/simple/foo
packages/simple/foo/foo-1.2.tar.gzBut that's a lot of work...
---------------------------If running two commands seems like too much work... Take heart! The ``pip2pi``
command will run both of them for you... **And** it will use ``rsync`` to copy
the new packages and index to a remote host! ::$ pip2pi example.com:/var/www/packages/ foo==1.2
...
$ curl -I http://example.com/packages/simple/foo/foo-1.2.tar.gz | head -n1
HTTP/1.1 200 OKBut that's still too much work...
.................................Take heart! Your shell's ``alias`` command can help. Add an alias like this to
your shell's runtime configuration file (hint: ``~/.bashrc`` or similar)::alias pip2acmeco="pip2pi dev.acmeco.com:/var/www/packages/"
Now updating your package index will be as simple as::
$ pip2acmeco foo==1.2 -r bar/requirements.txt
Using Your New Package Index
----------------------------To use the new package index, pass the ``--index-url=`` argument to ``pip``::
$ pip install --index-url=http://example.com/packages/simple/ foo
Or, once it has been mirrored, prefix you ``requirements.txt`` with
``--index-url=...``::$ cat requirements.txt
--index-url=http://example.com/packages/simple/
foo==1.2Without a web server
--------------------You can use your package index offline, too::
$ pip install --index-url=file:///var/www/packages/simple foo==1.2
Some Tips
---------When installing packages from source via ``python setup.py install`` or
``python setup.py install``, you may need to create a ``setup.cfg``, which
points to your package index. Here are some examples for an offline package
index in your Windows, Linux, or Mac file system::
[easy_install]
# Windows
# index_url = file:///C:/pip2pi/simple/# Linux
# index_url = file:///home/myusername/.pip2pi/simple/# Mac
index_url = file:///Users/myusername/.pip2pi/simple/
Note the triple ``///`` after ``file:`` -- two for the protocol,
the third for the root of the local file system.Keywords
========* Mirror PyPI
* Offline PyPI
* Create offline PyPI mirror