Update README to reflect run/update commands (#451)

* DOC: Update README to use new run/update commands

* DOC: Remove running on heroku/dotcloud section from README

The linked repo isn't maintained with last update in 2012

* DOC: Update missing pypi-server cmds with run command

* DOC: Fix CI status badge
This commit is contained in:
Johannes Faigle 2023-02-02 13:19:04 +01:00 committed by GitHub
parent abc4bfb418
commit 5fd640062c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -73,7 +73,7 @@ not officially supported, and will not receive bugfixes or new features.
2. Copy some packages into your ``~/packages`` folder and then 2. Copy some packages into your ``~/packages`` folder and then
get your ``pypiserver`` up and running:: get your ``pypiserver`` up and running::
pypi-server -p 8080 ~/packages & # Will listen to all IPs. pypi-server run -p 8080 ~/packages & # Will listen to all IPs.
3. From the client computer, type this:: 3. From the client computer, type this::
@ -92,128 +92,37 @@ not officially supported, and will not receive bugfixes or new features.
4. Enter ``pypi-server -h`` in the cmd-line to print a detailed usage message:: 4. Enter ``pypi-server -h`` in the cmd-line to print a detailed usage message::
pypi-server [OPTIONS] [PACKAGES_DIRECTORY...] start PyPI compatible package server serving packages from PACKAGES_DIRECTORY. If PACKAGES_DIRECTORY is not given on the command line, it uses the default ~/packages. pypiserver scans this directory recursively for packages. It skips packages and directories starting with a dot. Multiple package directories may be specified.
start PyPI compatible package server serving packages from
PACKAGES_DIRECTORY. If PACKAGES_DIRECTORY is not given on the
command line, it uses the default ~/packages. pypiserver scans this
directory recursively for packages. It skips packages and
directories starting with a dot. Multiple package directories can be
specified.
pypi-server understands the following options: positional arguments:
{run,update}
run Run pypiserver, serving packages from
PACKAGES_DIRECTORY
update Handle updates of packages managed by pypiserver. By
default, a pip command to update the packages is
printed to stdout for introspection or pipelining. See
the `-x` option for updating packages directly.
-p, --port PORT options:
Listen on port PORT (default: 8080). -h, --help show this help message and exit
-v, --verbose Enable verbose logging; repeat for more verbosity.
-i, --interface INTERFACE --log-file FILE Write logging info into this FILE, as well as to
Listen on interface INTERFACE (default: 0.0.0.0, any interface). stdout or stderr, if configured.
--log-stream STREAM Log messages to the specified STREAM. Valid values are
-a, --authenticate (update|download|list), ... stdout, stderr, and none
Comma-separated list of (case-insensitive) actions to authenticate. --log-frmt FORMAT The logging format-string. (see `logging.LogRecord`
Requires to have set the password (-P option). class from standard python library)
To password-protect package downloads (in addition to uploads) while --hash-algo HASH_ALGO
leaving listings public, use: Any `hashlib` available algorithm to use for
-P foo/htpasswd.txt -a update,download generating fragments on package links. Can be disabled
To allow unauthorized access, use: with one of (0, no, off, false).
-P . -a . --backend {auto,simple-dir,cached-dir}
Note that when uploads are not protected, the `register` command A backend implementation. Keep the default 'auto' to
is not necessary, but `~/.pypirc` still need username and password fields, automatically determine whether to activate caching or
even if bogus. not
By default, only 'update' is password-protected. --version show program's version number and exit
-P, --passwords PASSWORD_FILE
Use apache htpasswd file PASSWORD_FILE to set usernames & passwords when
authenticating certain actions (see -a option).
To allow unauthorized access, use:
-P . -a .
--disable-fallback
Disable redirect to real PyPI index for packages not found in the
local index.
--fallback-url FALLBACK_URL
For packages not found in the local index, this URL will be used to
redirect to (default: https://pypi.org/simple/).
--health-endpoint HEALTH_ENDPOINT
Configure a custom liveness endpoint. It always returns 200 Ok if
the service is up. Otherwise, it means that the service is not responsive.
--server METHOD
Use METHOD to run the server. Valid values include paste,
cherrypy, twisted, gunicorn, gevent, wsgiref, auto. The
default is to use "auto" which chooses one of paste, cherrypy,
twisted or wsgiref.
-r, --root PACKAGES_DIRECTORY
[deprecated] Serve packages from PACKAGES_DIRECTORY.
-o, --overwrite
Allow overwriting existing package files.
--hash-algo ALGO
Any `hashlib` available algo used as fragments on package links.
Set one of (0, no, off, false) to disabled it (default: md5).
--welcome HTML_FILE
Uses the ASCII contents of HTML_FILE as welcome message response.
-v
Enable verbose logging; repeat for more verbosity.
--log-conf <FILE>
Read logging configuration from FILE.
By default, configuration is read from `log.conf` if found in server's dir.
--log-file <FILE>
Write logging info into this FILE.
--log-frmt <FILE>
The logging format-string (see `logging.LogRecord` class from standard python library).
[Default: %(asctime)s|%(name)s|%(levelname)s|%(thread)d|%(message)s]
--log-req-frmt FORMAT
A format-string selecting Http-Request properties to log; set to '%s' to see them all.
[Default: %(bottle.request)s]
--log-res-frmt FORMAT
A format-string selecting Http-Response properties to log; set to '%s' to see them all.
[Default: %(status)s]
--log-err-frmt FORMAT
A format-string selecting Http-Error properties to log; set to '%s' to see them all.
[Default: %(body)s: %(exception)s \n%(traceback)s]
--cache-control AGE
Add "Cache-Control: max-age=AGE, public" header to package downloads.
Pip 6+ needs this for caching.
pypi-server -h, --help
Show this help message.
pypi-server --version
Show pypi-server's version.
pypi-server -U [OPTIONS] [PACKAGES_DIRECTORY...]
Update packages in PACKAGES_DIRECTORY. This command searches
pypi.org for updates and shows a pip command line which
updates the package.
The following additional options can be specified with -U:
-x
Execute the pip commands instead of only showing them.
-d DOWNLOAD_DIRECTORY
Download package updates to this directory. The default is to use
the directory which contains the latest version of the package to
be updated.
-u
Allow updating to unstable version (alpha, beta, rc, dev versions).
Visit https://github.com/pypiserver/pypiserver for more information.
Visit https://github.com/pypiserver/pypiserver for more information
Client-Side Configurations Client-Side Configurations
========================== ==========================
@ -305,7 +214,7 @@ In that case, ``pypiserver`` is responsible for authenticating the upload-reques
#. You need to restart the server with the ``-P`` option only once #. You need to restart the server with the ``-P`` option only once
(but user/password pairs can later be added or updated on the fly):: (but user/password pairs can later be added or updated on the fly)::
./pypi-server -p 8080 -P htpasswd.txt ~/packages & ./pypi-server run -p 8080 -P htpasswd.txt ~/packages &
Upload with ``setuptools`` Upload with ``setuptools``
-------------------------- --------------------------
@ -363,7 +272,7 @@ You can always check to see what tags are currently available at our
To run the most recent release of ``pypiserver`` with Docker, simply:: To run the most recent release of ``pypiserver`` with Docker, simply::
docker run pypiserver/pypiserver:latest docker run pypiserver/pypiserver:latest run
This starts ``pypiserver`` serving packages from the ``/data/packages`` This starts ``pypiserver`` serving packages from the ``/data/packages``
directory inside the container, listening on the container port 8080. directory inside the container, listening on the container port 8080.
@ -375,17 +284,17 @@ which will always be 8080.
Of course, just running a container isn't that interesting. To map Of course, just running a container isn't that interesting. To map
port 80 on the host to port 8080 on the container:: port 80 on the host to port 8080 on the container::
docker run -p 80:8080 pypiserver/pypiserver:latest docker run -p 80:8080 pypiserver/pypiserver:latest run
You can now access your ``pypiserver`` at ``localhost:80`` in a web browser. You can now access your ``pypiserver`` at ``localhost:80`` in a web browser.
To serve packages from a directory on the host, e.g. ``~/packages``:: To serve packages from a directory on the host, e.g. ``~/packages``::
docker run -p 80:8080 -v ~/packages:/data/packages pypiserver/pypiserver:latest docker run -p 80:8080 -v ~/packages:/data/packages pypiserver/pypiserver:latest run
To authenticate against a local ``.htpasswd`` file:: To authenticate against a local ``.htpasswd`` file::
docker run -p 80:8080 -v ~/.htpasswd:/data/.htpasswd pypiserver/pypiserver:latest -P .htpasswd packages docker run -p 80:8080 -v ~/.htpasswd:/data/.htpasswd pypiserver/pypiserver:latest run -P .htpasswd packages
You can also specify ``pypiserver`` to run as a Docker service using a You can also specify ``pypiserver`` to run as a Docker service using a
composefile. An example composefile is `provided <docker-compose.yml>`_. composefile. An example composefile is `provided <docker-compose.yml>`_.
@ -420,13 +329,6 @@ following command, assuming you have *git* installed on your ``PATH``::
pip install git+git://github.com/pypiserver/pypiserver.git pip install git+git://github.com/pypiserver/pypiserver.git
Running on Heroku/Dotcloud
--------------------------
https://github.com/dexterous/pypiserver-on-the-cloud contains
instructions on how to run ``pypiserver`` on one of the supported cloud
service providers.
Recipes Recipes
======= =======
@ -434,14 +336,14 @@ Recipes
Managing the Package Directory Managing the Package Directory
------------------------------ ------------------------------
The ``pypi-server`` command has the ``-U`` option that searches for updates of The ``pypi-server`` command has the ``update`` command that searches for updates of
available packages. It scans the package directory for available available packages. It scans the package directory for available
packages and searches on pypi.org for updates. Without further packages and searches on pypi.org for updates. Without further
options ``pypi-server -U`` will just print a list of commands which must options ``pypi-server update`` will just print a list of commands which must
be run in order to get the latest version of each package. Output be run in order to get the latest version of each package. Output
looks like:: looks like::
$ ./pypi-server -U $ ./pypi-server update
checking 106 packages for newer version checking 106 packages for newer version
.........u.e...........e..u............. .........u.e...........e..u.............
@ -461,7 +363,7 @@ available versions on pypi. A dot(`.`) means the package is up-to-date, ``'u'``
means the package can be updated and ``'e'`` means the list of releases on means the package can be updated and ``'e'`` means the list of releases on
pypi is empty. After that it shows a *pip* command line which can be used pypi is empty. After that it shows a *pip* command line which can be used
to update a one package. Either copy and paste that or run to update a one package. Either copy and paste that or run
``pypi-server -Ux`` in order to really execute those commands. You need ``pypi-server update -x`` in order to really execute those commands. You need
to have *pip* installed for that to work however. to have *pip* installed for that to work however.
Specifying an additional ``-u`` option will also allow alpha, beta and Specifying an additional ``-u`` option will also allow alpha, beta and
@ -533,7 +435,7 @@ config file for ``systemd`` can be seen below::
User=www-data User=www-data
Group=www-data Group=www-data
ExecStart=/usr/local/bin/pypi-server -p 8080 -a update,download --log-file /var/log/pypiserver.log -P /etc/nginx/.htpasswd /var/www/pypi ExecStart=/usr/local/bin/pypi-server run -p 8080 -a update,download --log-file /var/log/pypiserver.log -P /etc/nginx/.htpasswd /var/www/pypi
ExecStop=/bin/kill -TERM $MAINPID ExecStop=/bin/kill -TERM $MAINPID
ExecReload=/bin/kill -HUP $MAINPID ExecReload=/bin/kill -HUP $MAINPID
Restart=always Restart=always
@ -561,7 +463,7 @@ package and as such, it provides excellent cross-platform support for process
management. An example configuration file for ``supervisor`` is given below:: management. An example configuration file for ``supervisor`` is given below::
[program:pypi] [program:pypi]
command=/home/pypi/pypi-venv/bin/pypi-server -p 7001 -P /home/pypi/.htpasswd /home/pypi/packages command=/home/pypi/pypi-venv/bin/pypi-server run -p 7001 -P /home/pypi/.htpasswd /home/pypi/packages
directory=/home/pypi directory=/home/pypi
user=pypi user=pypi
autostart=true autostart=true
@ -579,7 +481,7 @@ to use win32 or win64, and add that exe to environment PATH.
Create a start_pypiserver.bat:: Create a start_pypiserver.bat::
pypi-server -p 8080 C:\Path\To\Packages & pypi-server run -p 8080 C:\Path\To\Packages &
Test the batch file by running it first before creating the service. Make sure you can access Test the batch file by running it first before creating the service. Make sure you can access
the server remotely, and install packages. If you can, proceed, if not troubleshoot until you can. the server remotely, and install packages. If you can, proceed, if not troubleshoot until you can.
@ -933,7 +835,7 @@ Configure a custom health endpoint by CLI arguments
Run pypiserver with ``--health-endpoint`` argument:: Run pypiserver with ``--health-endpoint`` argument::
pypi-server --health-endpoint /action/health pypi-server run --health-endpoint /action/health
Configure a custom health endpoint by script Configure a custom health endpoint by script
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -1046,10 +948,10 @@ See the ``LICENSE.txt`` file.
.. _twine: https://pypi.org/project/twine/ .. _twine: https://pypi.org/project/twine/
.. _pypi-uploader: https://pypi.org/project/pypi-uploader/ .. _pypi-uploader: https://pypi.org/project/pypi-uploader/
.. _python-pam: https://pypi.org/project/python-pam/ .. _python-pam: https://pypi.org/project/python-pam/
.. |test-status| image:: https://github.com/pypiserver/pypiserver/workflows/Test/badge.svg .. |test-status| image:: https://github.com/pypiserver/pypiserver/actions/workflows/ci.yml/badge.svg
:alt: test status :alt: test status
:scale: 100% :scale: 100%
:target: https://github.com/pypiserver/pypiserver/actions?query=workflow%3ATest :target: https://github.com/pypiserver/pypiserver/actions/workflows/ci.yml
.. |pypi-ver| image:: https://img.shields.io/pypi/v/pypiserver.svg .. |pypi-ver| image:: https://img.shields.io/pypi/v/pypiserver.svg
:target: https://pypi.org/project/pypiserver/ :target: https://pypi.org/project/pypiserver/