имя | описание |
---|---|
Версия | 2.2.0 |
Дата: | 2024-09-15 |
Источник | https://github.com/pypiserver/pypiserver |
Пипи | https://pypi.org/project/pypiserver/ |
Тесты | https://github.com/pypiserver/pypiserver/actions |
Содействия | @ankostis , @mplanchard , @dee-me-tree-or-love , @pawamoy , кто-нибудь новый? Мы открыты для новых сопровождающих! #397 |
Лицензия | zlib/libpng + mit |
Сообщество | https://pypiserver.zulipchat.com |
Кончик
Обратитесь в дискуссии или общайтесь с нами на Zulip
Pypiserver - это минимальный сервер, совместимый с PYPI для PIP или easy_install . Он основан на бутылках и обслуживает пакеты из обычных каталогов. Колеса, BDIST, яйца и сопровождающие PGP-подписчики могут быть загружены либо с помощью PIP , Setuptools , Twine , Pypi-Uploader или просто скопированы с помощью SCP .
Примечание
Официальное программное обеспечение PYPI - это склад. Тем не менее, склад довольно специализирован, чтобы быть собственным программным обеспечением PYPI.org , и не должен использоваться в других контекстах. В частности, он официально не поддерживает использование в качестве индекса пользовательского пакета пользователями, желающими обслуживать свои собственные пакеты.
PypiServer реализует те же интерфейсы, что и PYPI, позволяя стандартному инструменту упаковки Python, таким как PIP и Twine , взаимодействовать с ним в качестве индекса упаковки так же, как и с PYPI, при этом упрощает получение рабочего индексного сервера.
Оглавление
Pypiserver работает с Python 3.6+ и PYPY3.
Старые версии Python все еще могут работать, но они не тестируются.
Для версий Legacy Python используйте серию PypiServer-1.x . Обратите внимание, что они официально не поддерживаются и не будут получать ошибки или новые функции.
Кончик
Команды ниже работают на UNIX-подобной операционной системе с оболочкой POSIX. Персонаж «~» расширяется в домашний каталог пользователя.
Если вы используете Windows, вам придется использовать их «коллеги Windows». То же самое верно для остальной части этой документации.
Установите PypiServer с этой командой
pip install pypiserver # Or: pypiserver[passlib,cache]
mkdir ~ /packages # Copy packages into this directory.
[! Совет] См. Также альтернативные методы установки
Скопируйте несколько пакетов в папку ~/пакеты , а затем поднимите пипейзервер .
pypi-server run -p 8080 ~ /packages & # Will listen to all IPs.
С клиентского компьютера введите это
# Download and install hosted packages.
pip install --extra-index-url http://localhost:8080/simple/ ...
# or
pip install --extra-index-url http://localhost:8080 ...
# Search hosted packages.
pip search --index http://localhost:8080 ...
# Note that pip search does not currently work with the /simple/ endpoint.
[! Совет] См. Также конфигурации на стороне клиента, чтобы избежать утомительной печати.
Введите pypi-server -h в CMD-линии, чтобы распечатать подробное сообщение об использовании
usage: pypi-server [-h] [-v] [--log-file FILE] [--log-stream STREAM]
[--log-frmt FORMAT] [--hash-algo HASH_ALGO]
[--backend {auto,simple-dir,cached-dir}] [--version]
{run,update} ...
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.
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.
optional arguments:
-h, --help show this help message and exit
-v, --verbose Enable verbose logging; repeat for more verbosity.
--log-file FILE Write logging info into this FILE, as well as to
stdout or stderr, if configured.
--log-stream STREAM Log messages to the specified STREAM. Valid values are
stdout, stderr, and none
--log-frmt FORMAT The logging format-string. (see `logging.LogRecord`
class from standard python library)
--hash-algo HASH_ALGO
Any `hashlib` available algorithm to use for
generating fragments on package links. Can be disabled
with one of (0, no, off, false).
--backend {auto,simple-dir,cached-dir}
A backend implementation. Keep the default 'auto' to
automatically determine whether to activate caching or
not
--version show program's version number and exit
Visit https://github.com/pypiserver/pypiserver for more information
Введите PYPI-Server Run -H в CMD-линии, чтобы распечатать подробное использование
usage: pypi-server run [-h] [-v] [--log-file FILE] [--log-stream STREAM]
[--log-frmt FORMAT] [--hash-algo HASH_ALGO]
[--backend {auto,simple-dir,cached-dir}] [--version]
[-p PORT] [-i HOST] [-a AUTHENTICATE]
[-P PASSWORD_FILE] [--disable-fallback]
[--fallback-url FALLBACK_URL]
[--health-endpoint HEALTH_ENDPOINT] [--server METHOD]
[-o] [--welcome HTML_FILE] [--cache-control AGE]
[--log-req-frmt FORMAT] [--log-res-frmt FORMAT]
[--log-err-frmt FORMAT]
[package_directory [package_directory ...]]
positional arguments:
package_directory The directory from which to serve packages.
optional arguments:
-h, --help show this help message and exit
-v, --verbose Enable verbose logging; repeat for more verbosity.
--log-file FILE Write logging info into this FILE, as well as to
stdout or stderr, if configured.
--log-stream STREAM Log messages to the specified STREAM. Valid values are
stdout, stderr, and none
--log-frmt FORMAT The logging format-string. (see `logging.LogRecord`
class from standard python library)
--hash-algo HASH_ALGO
Any `hashlib` available algorithm to use for
generating fragments on package links. Can be disabled
with one of (0, no, off, false).
--backend {auto,simple-dir,cached-dir}
A backend implementation. Keep the default 'auto' to
automatically determine whether to activate caching or
not
--version show program's version number and exit
-p PORT, --port PORT Listen on port PORT (default: 8080)
-i HOST, -H HOST, --interface HOST, --host HOST
Listen on interface INTERFACE (default: 0.0.0.0)
-a AUTHENTICATE, --authenticate AUTHENTICATE
Comma-separated list of (case-insensitive) actions to
authenticate (options: download, list, update;
default: update).
Any actions not specified are not authenticated, so
to authenticate downloads and updates, but allow
unauthenticated viewing of the package list, you would
use:
pypi-server -a 'download, update' -P
./my_passwords.htaccess
To disable authentication, use:
pypi-server -a . -P .
See the `-P` option for configuring users and
passwords.
Note that when uploads are not protected, the
`register` command is not necessary, but `~/.pypirc`
still needs username and password fields, even if
bogus.
-P PASSWORD_FILE, --passwords PASSWORD_FILE
Use an apache htpasswd file PASSWORD_FILE to set
usernames and passwords for authentication.
To allow unauthorized access, use:
pypi-server -a . -P .
--disable-fallback Disable the default redirect to PyPI for packages not
found in the local index.
--fallback-url FALLBACK_URL
Redirect to FALLBACK_URL for packages not found in the
local index.
--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,
and auto. The default is to use "auto", which chooses
one of paste, cherrypy, twisted, or wsgiref.
-o, --overwrite Allow overwriting existing package files during
upload.
--welcome HTML_FILE Use the contents of HTML_FILE as a custom welcome
message on the home page.
--cache-control AGE Add "Cache-Control: max-age=AGE" header to package
downloads. Pip 6+ requires this for caching.AGE is
specified in seconds.
--log-req-frmt FORMAT
A format-string selecting Http-Request properties to
log; set to '%s' to see them all.
--log-res-frmt FORMAT
A format-string selecting Http-Response properties to
log; set to '%s' to see them all.
--log-err-frmt FORMAT
A format-string selecting Http-Error properties to
log; set to '%s' to see them all.
Более подробная информация о обновлении PYPI-Server
usage: pypi-server update [-h] [-v] [--log-file FILE] [--log-stream STREAM]
[--log-frmt FORMAT] [--hash-algo HASH_ALGO]
[--backend {auto,simple-dir,cached-dir}] [--version]
[-x] [-d DOWNLOAD_DIRECTORY] [-u]
[--blacklist-file IGNORELIST_FILE]
[package_directory [package_directory ...]]
positional arguments:
package_directory The directory from which to serve packages.
optional arguments:
-h, --help show this help message and exit
-v, --verbose Enable verbose logging; repeat for more verbosity.
--log-file FILE Write logging info into this FILE, as well as to
stdout or stderr, if configured.
--log-stream STREAM Log messages to the specified STREAM. Valid values are
stdout, stderr, and none
--log-frmt FORMAT The logging format-string. (see `logging.LogRecord`
class from standard python library)
--hash-algo HASH_ALGO
Any `hashlib` available algorithm to use for
generating fragments on package links. Can be disabled
with one of (0, no, off, false).
--backend {auto,simple-dir,cached-dir}
A backend implementation. Keep the default 'auto' to
automatically determine whether to activate caching or
not
--version show program's version number and exit
-x, --execute Execute the pip commands rather than printing to
stdout
-d DOWNLOAD_DIRECTORY, --download-directory DOWNLOAD_DIRECTORY
Specify a directory where packages updates will be
downloaded. The default behavior is to use the
directory which contains the package being updated.
-u, --allow-unstable Allow updating to unstable versions (alpha, beta, rc,
dev, etc.)
--blacklist-file IGNORELIST_FILE, --ignorelist-file IGNORELIST_FILE
Don't update packages listed in this file (one package
name per line, without versions, '#' comments
honored). This can be useful if you upload private
packages into pypiserver, but also keep a mirror of
public packages that you regularly update. Attempting
to pull an update of a private package from `pypi.org`
might pose a security risk - e.g. a malicious user
might publish a higher version of the private package,
containing arbitrary code.
Всегда указывать URL -адрес PYPI на командной строке немного громоздкий. Поскольку PypiServer перенаправляет PIP/Easy_Install в индекс pypi.org , если у него нет запрошенного пакета, это хорошая идея, чтобы настроить их, чтобы всегда использовать свой локальный индекс PYPI.
Для команды PIP это можно сделать, установив переменную среды PIP_EXTRA_INDEX_URL в вашем .BASHR/.PROFILE/.ZSHRC
export PIP_EXTRA_INDEX_URL=http://localhost:8080/simple/
или добавив следующие строки в ~/.pip/pip.conf
[global]
extra-index-url = http://localhost:8080/simple/
Примечание
Если вы установили PypiServer на удаленный URL-адрес без HTTPS, вы получите «ненадежное» предупреждение от PIP , призывая вас добавить опцию -доверенный хост . Вы также можете навсегда включить этот вариант в свои конфигурационные штуки или переменные среды.
Для команды easy_install вы можете установить следующую конфигурацию в ~/.pydistutils.cfg
[easy_install]
index_url = http://localhost:8080/simple/
Вместо того, чтобы копировать пакеты непосредственно в папку сервера (т.е. с SCP ), вы можете использовать инструменты Python для задачи, например, загрузка python setup.py . В этом случае Pypiserver отвечает за аутентификацию запросов на загрузку.
Примечание
Мы настоятельно рекомендуем защитить пароль ваших загрузок!
Можно отключить аутентификацию для загрузок (например, во интранетах). Чтобы избежать ленивых решений о безопасности, прочитайте помощь для вариантов -p и -a .
Сначала убедитесь, что у вас установлен модуль PassLib (обратите внимание, что требуется PassLib> = 1.6 ), который необходим для анализа файла Apache HtpassWD, указанного с опцией -p , -passwords (см. Далее шаги)
pip install passlib
Создайте файл Apache HTPASSWD , по крайней мере, с одной парой пользователя/пароля с этой командой (вам будет предложено для пароля)
htpasswd -sc htpasswd.txt < some_username >
Кончик
Прочитайте этот вопрос для запуска htpasswd
CMD под Windows или, если у вас есть поддельные пароли, которые вам не волнует, потому что они предназначены для внутренней службы (которая все еще «плохой», с точки зрения безопасности ...) Вы можете использовать эту публику услуга
Кончик
При доступе к Pypiserver через API альтернативные методы аутентификации доступны через флаг Auther Config. Любое обратное возвращение логического, может быть передано в конфигурацию PypiServer, чтобы обеспечить пользовательскую аутентификацию. Например, для настройки PypiServer для аутентификации с использованием Python-PAM
import pam
pypiserver.default_config(auther=pam.authenticate)
Пожалуйста, смотрите Using Ad-hoc authentication providers
для получения дополнительной информации.
Вам нужно перезапустить сервер с опцией -p только один раз (но пары пользователя/пароля могут быть добавлены или обновлены на Fly)
./pypi-server run -p 8080 -P htpasswd.txt ~ /packages &
На стороне клиента, отредактируйте или создайте файл ~/.pypirc с аналогичным контентом:
[distutils]
index-servers =
pypi
local
[pypi]
username: < your_pypi_username >
password: < your_pypi_passwd >
[local]
repository: http://localhost:8080
username: < some_username >
password: < some_passwd >
Затем из каталога питона-проекта, который вы хотите загрузить, выпустите эту команду:
python setup.py sdist upload -r local
Чтобы избежать хранения ваших паролей на диске, в чистоте, вы можете либо:
Используйте команду Register Setuptools с опцией -r , как это
python setup.py sdist register -r local upload -r local
Используйте библиотеку шпагата , которая разбивает процедуру за два шага. Кроме того, он поддерживает подписание ваших файлов с помощью PGP-подписчиков и загрузку сгенерированных файлов .ASC в PypiServer ::
twine upload -r local --sign -identity user_name ./foo-1.zip
Начиная с версии 1.2.5, официальные изображения Docker будут созданы для каждого Push to main
, каждого Dev, Alpha или бета -выпуска, и каждый окончательный выпуск. Самый последний полный релиз всегда будет доступен под последним тегом, а текущая main
филиала всегда будет доступна под нестабильным тегом.
Вы всегда можете проверить, какие теги в настоящее время доступны в нашем Docker Repo .
Чтобы запустить самый последний выпуск PypiServer с Docker, просто
docker run pypiserver/pypiserver:latest run
Это запускает пакеты сборов PypiServer из каталога /данных /пакетов внутри контейнера, прослушивая контейнер -порт 8080.
Контейнер принимает все те же аргументы, что и обычный исполняемый файл pypi -server , за исключением внутреннего контейнерного порта ( -p ), который всегда будет 8080.
Конечно, просто запуск контейнера не так интересно. Карту карты 80 на хосте в порт 8080 в контейнере ::
docker run -p 80:8080 pypiserver/pypiserver:latest run
Теперь вы можете получить доступ к своему Pypiserver в Localhost: 80 в веб -браузере.
Для обслуживания пакетов из каталога на хосте, например ,/пакетов
docker run -p 80:8080 -v ~ /packages:/data/packages pypiserver/pypiserver:latest run
Для аутентификации против локального файла .htpasswd ::
docker run -p 80:8080 -v ~ /.htpasswd:/data/.htpasswd pypiserver/pypiserver:latest run -P .htpasswd packages
Вы также можете указать PypiServer для работы в качестве службы Docker, используя ComposeFile. Пример ComposeFile представлен как docker-compose.yaml
При попытке методов ниже, сначала используйте следующую команду, чтобы проверить, существуют ли предыдущие версии Pypierver , и (необязательно) удалите их ::
# VERSION-CHECK: Fails if not installed.
pypi-server --version
# UNINSTALL: Invoke again until it fails.
pip uninstall pypiserver
В случае, если последняя версия в PYPI является предварительным выпуском, вы должны использовать опцию PIP's - PRE . И обновить существующую инсталляцию объединить его с --ignore-installed
pip install pypiserver --pre -I
Вы даже можете установить новейший PypiServer непосредственно из GitHub со следующей командой, предполагая, что у вас установлен git на вашем пути
pip install git+git://github.com/pypiserver/pypiserver.git
Команда PYPI-Server имеет команду Update , которая ищет обновления доступных пакетов. Он сканирует каталог пакетов на наличие доступных пакетов и поиска на pypi.org для обновлений. Без дополнительных параметров обновления PYPI-Server просто печатают список команд, которые необходимо выполнить, чтобы получить последнюю версию каждого пакета. Вывод выглядит как:
$ ./pypi-server update
checking 106 packages for newer version
.........u.e...........e..u.............
.....e..............................e...
..........................
no releases found on pypi for PyXML, Pymacs, mercurial, setuptools
# update raven from 1.4.3 to 1.4.4
pip -q install --no-deps --extra-index-url https://pypi.org/simple/ -d /home/ralf/packages/mirror raven==1.4.4
# update greenlet from 0.3.3 to 0.3.4
pip -q install --no-deps --extra-index-url https://pypi.org/simple/ -d /home/ralf/packages/mirror greenlet==0.3.4
Сначала он печатает для каждого пакета один символ после проверки доступных версий на PYPI. Точка (.) Означает, что пакет актуальна, «U» означает, что пакет может быть обновлен, а «E» означает, что список выпусков на PYPI пуст. После этого показана командная строка PIP , которая может быть использована для обновления одного пакета. Либо скопируйте и вставьте это, либо запустите обновление PYPI -Server -x, чтобы действительно выполнить эти команды. Однако вам нужно установить PIP для работы.
Указание дополнительной опции -u также позволит загрузить альфа, бета -версию и выпуск кандидатов. Без этой опции эти релизы не будут рассмотрены.
Важный
По умолчанию Pypiserver сканирует весь каталог пакетов каждый раз, когда происходит входящий HTTP -запрос. Это не проблема для небольшого количества пакетов, но вызывает заметные замедления при обслуживании тысяч пакетов.
Если вы столкнетесь с этой проблемой, можно получить значительное ускорение, позволяя включить функциональность кэширования каталога PypiServer. Единственное требование - установить пакет Watchdog , или он может быть установлен во время установки PypiServer , указав опцию Cache Persons ::
pip install pypiserver[cache]
Дополнительные ускорения можно получить с помощью функциональности кэширования вашего веб -сервера. Например, если вы используете nginx
в качестве обратного прокси, как описано ниже, Behind a reverse proxy
, вы можете легко включить кэширование. Например, чтобы NGINX кэшировал до 10 гигабайт данных на срок до 1 часа ::
proxy_cache_path /data/nginx/cache
levels=1:2
keys_zone=pypiserver_cache:10m
max_size=10g
inactive=60m
use_temp_path=off ;
server {
# ...
location / {
proxy_cache pypiserver_cache ;
proxy_pass http://localhost:8080 ;
}
}
Кончик
Использование кэширования веб -сервера особенно полезно, если у вас высокий объем запроса. Используя кэширование NGINX, реальная установка PypiServer была способна легко поддерживать более 1000 загрузок пакетов/мин при пиковой загрузке.
Существует множество вариантов обработки автоматизированного запуска PypiServer после запуска системы. Двумя наиболее распространенными являются SystemD и Supervisor для Linux Systems. Для создания служб Windows с помощью сценариев не является легкой задачей без стороннего инструмента, такого как NSSM .
SystemD устанавливается по умолчанию в большинстве современных систем Linux, и, как таковые, это отличный вариант для управления процессом PypiServer. Пример конфигурации для SystemD можно увидеть ниже
[Unit]
Description=A minimal PyPI server for use with pip/easy_install.
After=network.target
[Service]
Type=simple
# systemd requires absolute path here too.
PIDFile=/var/run/pypiserver.pid
User=www-data
Group=www-data
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
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
WorkingDirectory=/var/www/pypi
TimeoutStartSec=3
RestartSec=5
[Install]
WantedBy=multi-user.target
Регулирование путей и добавление этого файла в качестве pypiserver.service в свой каталог SystemD/System позволит управлять процессом PypiServer с SystemCtl , например, SystemCtl Start PypiServer .
Более полезную информацию о SystemD можно найти по адресу https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-danage-systemd-services-and- Unit
Супервайзер имеет преимущество в том, чтобы быть чистым пакетом Python, и поэтому он обеспечивает отличную кроссплатформенную поддержку для управления процессами. Пример файла конфигурации для супервизора приведен ниже
[program:pypi]
command=/home/pypi/pypi-venv/bin/pypi-server run -p 7001 -P /home/pypi/.htpasswd /home/pypi/packages
directory=/home/pypi
user=pypi
autostart=true
autorestart=true
stderr_logfile=/var/log/pypiserver.err.log
stdout_logfile=/var/log/pypiserver.out.log
Оттуда процесс можно управлять через Superisorsord с помощью Supervisorctl .
Для Windows скачать NSSM с https://nssm.cc unzip в желаемое место, такое как файлы программы. Решите, собираетесь ли вы использовать win32
или win64
, и добавьте это PATH
exe
к окружающей среде.
Создайте start_pypiserver.bat
pypi-server run -p 8080 C: P ath T o P ackages &
Кончик
Проверьте пакетный файл, запустив его сначала перед созданием службы. Убедитесь, что вы можете получить доступ к серверу удаленно и установить пакеты. Если вы можете, продолжайте, если не устранение неполадок, пока не сможете. Это гарантирует, что вы знаете, что сервер работает, прежде чем добавить NSSM в микс.
Из командной строки
nssm install pypiserver
Эта команда запустит приложение NSSM GUI
Path: C: P ath T o s tart_pypiserver.bat
Startup directory: Auto generates when selecting path
Service name: pypiserver
Есть больше вкладок, но это основная настройка. Если сервис должен работать с определенными учетными данными для входа, убедитесь, что вы вводите эти учетные данные на вкладке.
Начните сервис
nssm start pypiserver
Кончик
Другие полезные команды
nssm --help
nssm stop < servicename >
nssm restart < servicename >
nssm status < servicename >
Для получения подробной информации, пожалуйста, посетите https://nssm.cc
Веб-сервер из бутылки , который поддерживает многие WSGI-серверы, среди прочих, пасту , вишневую , витую и wsgiref (часть Python); Вы выбираете их, используя флаг - -сервер .
Вы можете просмотреть все поддерживаемые серверы WSGI, используя следующий интерактивный код
>> > from pypiserver import bottle
>> > list ( bottle . server_names . keys ())
[ 'cgi' , 'gunicorn' , 'cherrypy' , 'eventlet' , 'tornado' , 'geventSocketIO' ,
'rocket' , 'diesel' , 'twisted' , 'wsgiref' , 'fapws3' , 'bjoern' , 'gevent' ,
'meinheld' , 'auto' , 'aiohttp' , 'flup' , 'gae' , 'paste' , 'waitress' ]
Если ни один из вышеперечисленных серверов не соответствует вашим потребностям, вызовите только метод PypiServer: App () , который возвращает внутренний WSGI-APP, не запустив сервер-вы можете отправить его на любой сервер WSGI, который вам нравится. Прочитайте также использование секции API.
Некоторые примеры приведены ниже - вы можете найти более подробную информацию на сайте бутылки.
Чтобы использовать свой Apache2 с PypiServer , предпочитайте использовать MOD_WSGI, как объяснено в документации Бутылки.
Примечание
Если вы решите вместо этого пойти с MOD_PROXY , помните, что вы можете столкнуться с проблемами с Prefix-Path (см. #155).
Адаптировать и поместить следующую конфигурацию Apache либо в область верхнего уровня, либо внутри некоторых <VirtualHost>
(внесено в пользу Томаса Уолдманна):
WSGIScriptAlias / /yoursite/wsgi/pypiserver-wsgi.py
WSGIDaemonProcess pypisrv user=pypisrv group=pypisrv umask=0007
processes=1 threads=5 maximum-requests=500
display-name=wsgi-pypisrv inactivity-timeout=300
WSGIProcessGroup pypisrv
WSGIPassAuthorization On # Required for authentication (https://github.com/pypiserver/pypiserver/issues/288)
< Directory /yoursite/wsgi >
Require all granted
< /Directory >
или при использовании более старого Apache <2,4 замените последнюю часть этим ::
< Directory /yoursite/wsgi >
Order deny,allow
Allow from all
< /Directory >
Затем создайте файл /yoursite/cfg/pypiserver.wsgi и убедитесь, что пользователь и группа директивы wsgidaemonprocess ( pypisrv: pypisrv в примере) имеют разрешение на чтение на нем
import pypiserver
conf = pypiserver . default_config (
root = "/yoursite/packages" ,
password_file = "/yoursite/htpasswd" , )
application = pypiserver . app ( ** conf )
[! Tip] Если вы установили PypiServer в VirtualENV, следуйте инструкциям MOD_WSGI и подойдите к коду Python выше со следующим образом
import site site . addsitedir ( '/yoursite/venv/lib/pythonX.X/site-packages' )
Примечание
По соображениям безопасности обратите внимание, что Директива по каталогу предоставляет доступ к каталогу, в котором находится стартап-сценарий WSGI , в одиночку; ничего больше.
Примечание
Чтобы включить поддержку HTTPS на Apache, настройте директиву, которая содержит конфигурацию WSGI для использования SSL.
Следующая команда использует снаряжение для запуска Pypiserver
gunicorn -w4 ' pypiserver:app(root="/home/ralf/packages") '
или при использовании нескольких корней
gunicorn -w4 ' pypiserver:app(root=["/home/ralf/packages", "/home/ralf/experimental"]) '
Вставка позволяет запускать несколько приложений WSGI в разных путях URL. Следовательно, можно подавать различные наборы пакетов на разных путях.
Следующий пример Paste.ini может быть использован для обслуживания стабильных и нестабильных пакетов на разных путях
[composite:main]
use = egg:Paste#urlmap
/unstable/ = unstable
/ = stable
[app:stable]
use = egg:pypiserver#main
root = ~ /stable-packages
[app:unstable]
use = egg:pypiserver#main
root = ~ /stable-packages
~ /unstable-packages
[server:main]
use = egg:gunicorn#main
host = 0.0.0.0
port = 9000
workers = 5
accesslog = -
Примечание
Вам нужно установить больше зависимостей для работы, например ::
pip install paste pastedeploy gunicorn pypiserver
Сервер может начать с
gunicorn_paster paste.ini
Вы также можете запустить Pypiserver за обратным прокси.
Расширить конфигурацию Nginx
upstream pypi {
server pypiserver.example.com:12345 fail_timeout=0 ;
}
server {
server_name myproxy.example.com ;
location / {
proxy_set_header Host $host : $server_port ;
proxy_set_header X-Forwarded-Proto $scheme ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_pass http://pypi ;
}
}
Начиная с PypiServer 1.3, вы также можете использовать заголовок X-Forwarded-Host
в вашей конфигурации обратного прокси, чтобы включить изменение базового URL. Например, если вы хотите разместить PypiServer по определенному пути на вашем сервере
upstream pypi {
server localhost:8000 ;
}
server {
location /pypi/ {
proxy_set_header X-Forwarded-Host $host : $server_port /pypi ;
proxy_set_header X-Forwarded-Proto $scheme ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_pass http://pypi ;
}
}
Использование обратного прокси - это предпочтительный способ получить пипизервер за HTTPS. Например, чтобы поставить Pypiserver за HTTPS на порт 443 с автоматическим перенаправлением HTTP, используя nginx
upstream pypi {
server localhost:8000 ;
}
server {
listen 80 default_server ;
server_name _ ;
return 301 https:// $host$request_uri ;
}
server {
listen 443 ssl ;
server_name pypiserver.example.com ;
ssl_certificate /etc/star.example.com.crt ;
ssl_certificate_key /etc/star.example.com.key ;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ;
ssl_ciphers HIGH: ! aNULL: ! MD5 ;
location / {
proxy_set_header Host $host : $server_port ;
proxy_set_header X-Forwarded-Proto $scheme ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_pass http://pypi ;
}
}
Кончик
Пожалуйста, смотрите документы Nginx HTTPS для получения более подробной информации.
Получение и сохранение ваших сертификатов может быть упрощено, например, с использованием Certbot и letsEncrypt.
Также можно использовать Traefik, чтобы поставить Pypiserver за HTTPS на порт 443 с автоматическим перенаправлением HTTP с использованием Docker Compose. Пожалуйста, смотрите пример Docker-compose.yml для получения дополнительной информации.
Чтобы включить рекламные провидеры аутентификации или использовать WSGI-сервер, не поддерживаемые бутылками вне коробки, вам нужно было запустить PypiServer через его API.
Основной точкой входа для настройки PypiServer является функция Pypiserver: App (). Эта функция возвращает внутреннее WSGI-App, которое вы затем отправляете в любой WSGI-сервер, который вам нравится.
Чтобы получить все ключевые слова PypiServer: app () и их объяснения, прочитайте функцию PypiServer: default_config ()
Наконец, чтобы запустить WSGI-сервер с настроенным приложением, вызовите функцию бутылки: запустить (приложение, хост, порт, сервер) . Обратите внимание, что Pypiserver отправляется с собственной копией бутылки ; Чтобы использовать его, импортируйте так: из бутылки с импортом PypiServer
Функция Auther Keyword of PypiServer: App () может установить только с использованием API. Это может быть любым вызовом, который возвращает логическое при передаче имени пользователя и паролем для данного запроса.
Например, для аутентификации пользователей на основе файла /etc /passwd в Unix вы можете делегировать такие решения в библиотеку Python-Pam, выполнив эти шаги:
Убедитесь, что модуль Python-PAM установлен
pip install python-pam
Создайте питон-пипт по этим направлениям
$ cat > pypiserver-start.py
import pypiserver
from pypiserver import bottle
import pam
app = pypiserver.app(root= ' ./packages ' , auther=pam.authenticate)
bottle.run(app=app, host= ' 0.0.0.0 ' , port=80, server= ' auto ' )
[Ctrl+ D]
Вызвать Python-Script на запуск PypiServer
python pypiserver-start.py
Примечание
Модуль Python-PAM требует доступа к чтению /etc /shadow file; Вы можете добавить пользователя, под которым PypiServer сталкивается в группу Shadow , с такой командой: sudo usermod -a -g Shadow Pypy -User .
Интерпретатор микропитона для встроенных устройств может устанавливать пакеты с модулем upip.py. Модуль использует специализированную точку JSON для получения информации о пакете. Эта конечная точка поддерживается Pypiserver .
Его можно проверить с помощью порта Unix микропитона
cd micropython
ports/unix/micropython -m tools.upip install -i http://my-server:8080 -p /tmp/mymodules micropython-foobar
Установка пакетов из переписки встроенного устройства работает таким образом:
import network
import upip
sta_if = network . WLAN ( network . STA_IF )
sta_if . active ( True )
sta_if . connect ( '<your ESSID>' , '<your password>' )
upip . index_urls = [ "http://my-server:8080" ]
upip . install ( "micropython-foobar" )
Дополнительную информацию о MicropyThon-Packaging можно найти здесь: https://docs.micropython.org/en/latest/reference/packages.html
Pypiserver обеспечивает конечную точку здоровья по умолчанию AT /Health . Это всегда возвращает 200 ОК, если сервис истекает. В противном случае это означает, что услуга не является отзывчивой.
Кроме того, Pypiserver позволяет пользователям настраивать конечную точку Health. Алфаноковые символы, дефисы, прямые черты и подчеркивания допускаются, а конечная точка не должна перекрываться с какими -либо существующими маршрутами. Действительные примеры: /healthz , /health /live-1 , /api_health , /action /health
Запустите PypiServer с аргументом -Health-EndPoint :
pypi-server run --health-endpoint /action/health
import pypiserver
from pypiserver import bottle
app = pypiserver . app ( root = "./packages" , health_endpoint = "/action/health" )
bottle . run ( app = app , host = "0.0.0.0" , port = 8080 , server = "auto" )
Попробуйте curl http: // localhost: 8080/action/health
Чтобы создать копию репозитория, используйте
git clone https://github.com/pypiserver/pypiserver.git
cd pypiserver
Чтобы получить любые более поздние изменения, в приведенной выше папке используется:
git pull
Важный
Pypiserver не реализует полный API, как видно на PYPI. Он реализует достаточно, чтобы сделать easy_install , PIP установить и поиск .
Следующие ограничения известны:
Пожалуйста, используйте BugTracker GitHub для других ошибок, которые вы найдете.
Есть много других проектов, которые позволяют вам запустить собственный сервер PYPI. Если Pypiserver не работает для вас, следующие являются одними из самых популярных альтернатив:
Devpi-Server: надежный сервер CACHING PYPI.org, часть комплексного сервера PYPI-сервера в стиле GitHub и упаковки. (Версия: 2.1.4, дата доступа: 3/3/2015)
Проверьте это, так что вопрос: как бросить свой собственный pypi
Эти проекты когда -то были альтернативами для пипизервера, но в настоящее время они либо не являются незаконными, либо архивированными.
PIP2PI простой инструмент CMD-Line, который создает совместимую с PYP локальную папку из требований PIP
Flask-Pypi-Proxy-прокси для PYPI, который также позволяет загружать пользовательские пакеты.
Хотя это и не прямые альтернативы для использования Pypiserver в качестве индексного сервера, приведен следующее список связанных программных проектов, с которыми вы можете ознакомиться:
PYPI-UploAder: утилита командной строки для загрузки пакетов в ваш PypiServer от PYPI без необходимости сначала хранить их локально.
Twine: утилита командной строки для взаимодействия с PYPI или PYPISERVER .
Склад: программное обеспечение, которое питает сам PYPI. Это обычно не предназначено для управления конечными пользователями.
Pypiserver содержит копию бутылки, которая доступна по лицензии MIT, а оставшаяся часть распределена по лицензии Zlib/Libpng. См. Файл License.txt .