nama | keterangan |
---|---|
Versi | 2.2.0 |
Tanggal: | 2024-09-15 |
Sumber | https://github.com/pypiserver/pypiserver |
Pypi | https://pypi.org/project/pypiserver/ |
Tes | https://github.com/pypiserver/pypiserver/actions |
Pemelihara | @ankostis , @mplanchard , @dee-me-tree-or-love , @pawamoy , seseorang yang baru? Kami terbuka untuk pengelola baru! #397 |
Lisensi | zlib/libpng + mit |
Masyarakat | https://pypiserver.zulipchat.com |
Tip
Jangkau dalam diskusi , atau mengobrol dengan kami di Zulip
Pypiserver adalah server kompatibel PYPI minimal untuk PIP atau Easy_install . Ini didasarkan pada botol dan menyajikan paket dari direktori reguler. Roda, bdist, telur, dan tanda tangan PGP yang menyertainya dapat diunggah baik dengan PIP , setuptools , Twine , PYPI-Uploader , atau hanya disalin dengan SCP .
Catatan
PYPI perangkat lunak resmi adalah gudang. Namun, gudang cukup berspesialisasi untuk menjadi perangkat lunak PYPI.org , dan tidak boleh digunakan dalam konteks lain. Secara khusus, itu tidak secara resmi mendukung digunakan sebagai indeks paket khusus oleh pengguna yang ingin melayani paket mereka sendiri.
PYPISERVER mengimplementasikan antarmuka yang sama dengan PYPI, yang memungkinkan alat pengemasan python standar seperti PIP dan Twine untuk berinteraksi dengannya sebagai indeks paket seperti halnya dengan PYPI, sambil membuatnya lebih mudah untuk mendapatkan server indeks yang berjalan.
Daftar isi
Pypiserver bekerja dengan Python 3.6+ dan Pypy3.
Versi Python yang lebih tua mungkin masih berfungsi, tetapi tidak diuji.
Untuk versi python lama, gunakan seri Pypiserver-1.x . Perhatikan bahwa ini tidak didukung secara resmi, dan tidak akan menerima perbaikan bug atau fitur baru.
Tip
Perintah di bawah ini bekerja pada sistem operasi seperti UNIX dengan shell POSIX. Karakter '~' memperluas ke direktori home pengguna.
Jika Anda menggunakan Windows, Anda harus menggunakan "rekan Windows" mereka. Hal yang sama berlaku untuk sisa dokumentasi ini.
Instal Pypiserver dengan perintah ini
pip install pypiserver # Or: pypiserver[passlib,cache]
mkdir ~ /packages # Copy packages into this directory.
[! Tip] Lihat juga metode pemasangan alternatif
Salin beberapa paket ke folder ~/paket Anda dan kemudian angkat dan menjalankan PYPISERVER Anda
pypi-server run -p 8080 ~ /packages & # Will listen to all IPs.
Dari komputer klien, ketik ini
# 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.
[! Tip] Lihat juga konfigurasi sisi klien untuk menghindari pengetikan yang membosankan.
Masukkan pypi-server -h di CMD-line untuk mencetak pesan penggunaan terperinci
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
Masukkan PYPI-Server Run -h di CMD-line untuk mencetak penggunaan terperinci
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.
Rincian lebih lanjut tentang pembaruan 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.
Selalu menentukan URL PYPI pada baris perintah agak rumit. Karena PYPISERVER mengarahkan Pip/Easy_install ke indeks PYPI.org jika tidak memiliki paket yang diminta, itu adalah ide yang baik untuk mengkonfigurasi mereka untuk selalu menggunakan indeks PYPI lokal Anda.
Untuk perintah pip , ini dapat dilakukan dengan mengatur variabel lingkungan PIP_EXTRA_INDEX_URL di .bashr/.profile/.zshrc Anda
export PIP_EXTRA_INDEX_URL=http://localhost:8080/simple/
atau dengan menambahkan baris berikut ke ~/.pip/pip.conf
[global]
extra-index-url = http://localhost:8080/simple/
Catatan
Jika Anda telah menginstal PYPISERVER pada URL jarak jauh tanpa HTTPS Anda akan menerima peringatan "tidak dipercaya" dari PIP , mendesak Anda untuk menambahkan opsi -host-host . Anda juga dapat menyertakan opsi ini secara permanen di file konfigurasi atau variabel lingkungan Anda.
Untuk perintah easy_install Anda dapat mengatur konfigurasi berikut di ~/.pydistutils.cfg
[easy_install]
index_url = http://localhost:8080/simple/
Alih -alih menyalin paket langsung ke folder server (yaitu dengan SCP ), Anda dapat menggunakan alat Python untuk tugas tersebut, misalnya Python Setup.py Unggah . Dalam hal ini, Pypiserver bertanggung jawab untuk mengautentikasi permintaan unggahan.
Catatan
Kami sangat menyarankan untuk melindungi kata sandi unggahan Anda!
Dimungkinkan untuk menonaktifkan otentikasi untuk unggahan (misalnya dalam intranet). Untuk menghindari keputusan keamanan yang malas, baca Bantuan untuk -P dan -A opsi.
Pertama -tama pastikan Anda memiliki modul passlib yang diinstal (perhatikan bahwa passlib> = 1.6 diperlukan), yang diperlukan untuk mem -parsing file apache htpasswd yang ditentukan oleh -p , opsi --passwords (lihat langkah selanjutnya)
pip install passlib
Buat file Apache htpasswd dengan setidaknya satu pasangan pengguna/kata sandi dengan perintah ini (Anda akan diminta untuk kata sandi)
htpasswd -sc htpasswd.txt < some_username >
Tip
Baca ini jadi pertanyaan untuk menjalankan htpasswd
cmd di bawah windows atau jika Anda memiliki kata sandi palsu yang tidak Anda pedulikan karena mereka untuk layanan internal (yang masih "buruk", dari perspektif keamanan ...) Anda dapat menggunakan publik ini melayani
Tip
Saat mengakses Pypiserver melalui API, metode otentikasi alternatif tersedia melalui flag config auther . Setiap yang dapat dipanggil kembali, boolean dapat diteruskan ke konfigurasi Pypiserver untuk memberikan otentikasi khusus. Misalnya, untuk mengonfigurasi Pypiserver untuk mengotentikasi menggunakan Python-Pam
import pam
pypiserver.default_config(auther=pam.authenticate)
Silakan lihat Using Ad-hoc authentication providers
untuk informasi lebih lanjut.
Anda perlu me -restart server dengan opsi -p hanya sekali (tetapi pasangan pengguna/kata sandi nanti dapat ditambahkan atau diperbarui dengan cepat)
./pypi-server run -p 8080 -P htpasswd.txt ~ /packages &
Di sisi klien, edit atau buat file ~/.pypirc dengan konten serupa:
[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 >
Kemudian dari dalam direktori proyek Python yang ingin Anda unggah, keluarkan perintah ini:
python setup.py sdist upload -r local
Untuk menghindari menyimpan kata sandi Anda di disk, dalam teks yang jelas, Anda dapat:
Gunakan perintah register setuptools dengan opsi -r , seperti itu
python setup.py sdist register -r local upload -r local
Gunakan Perpustakaan Twine , yang melanggar prosedur dalam dua langkah. Selain itu, mendukung penandatanganan file Anda dengan tanda tangan PGP dan mengunggah file .asc yang dihasilkan ke pypiserver ::
twine upload -r local --sign -identity user_name ./foo-1.zip
Dimulai dengan versi 1.2.5, gambar Docker resmi akan dibangun untuk setiap dorongan ke main
, setiap dev, alpha, atau rilis beta, dan setiap rilis akhir. Rilis lengkap terbaru akan selalu tersedia di bawah tag terbaru , dan cabang main
saat ini akan selalu tersedia di bawah tag yang tidak stabil .
Anda selalu dapat memeriksa untuk melihat tag apa yang saat ini tersedia di repo Docker kami.
Untuk menjalankan rilis terbaru Pypiserver dengan Docker, sederhana
docker run pypiserver/pypiserver:latest run
Ini memulai paket Pypiserver yang melayani dari direktori /data /paket di dalam wadah, mendengarkan pada port kontainer 8080.
Wadah mengambil semua argumen yang sama seperti yang dapat dieksekusi PYPI -Server normal, dengan pengecualian port wadah internal ( -p ), yang akan selalu 8080.
Tentu saja, hanya menjalankan wadah tidak begitu menarik. Untuk memetakan port 80 pada host ke port 8080 pada wadah ::
docker run -p 80:8080 pypiserver/pypiserver:latest run
Anda sekarang dapat mengakses Pypiserver Anda di LocalHost: 80 di browser web.
Untuk melayani paket dari direktori di host, misalnya /paket
docker run -p 80:8080 -v ~ /packages:/data/packages pypiserver/pypiserver:latest run
Untuk mengotentikasi terhadap file .htpasswd lokal ::
docker run -p 80:8080 -v ~ /.htpasswd:/data/.htpasswd pypiserver/pypiserver:latest run -P .htpasswd packages
Anda juga dapat menentukan Pypiserver untuk dijalankan sebagai layanan Docker menggunakan ComposeFile. Contoh ComposeFile disediakan sebagai docker-compose.yaml
Saat mencoba metode di bawah ini, pertama -tama gunakan perintah berikut untuk memeriksa apakah versi Pypiserver sebelumnya sudah ada, dan (secara opsional) uninstall mereka ::
# VERSION-CHECK: Fails if not installed.
pypi-server --version
# UNINSTALL: Invoke again until it fails.
pip uninstall pypiserver
Jika versi terbaru di PYPI adalah pra-rilis, Anda harus menggunakan opsi PIP . Dan untuk memperbarui instalasi yang ada menggabungkannya dengan --ignore-installed
pip install pypiserver --pre -I
Anda bahkan dapat menginstal Pypiserver terbaru langsung dari GitHub dengan perintah berikut, dengan asumsi Anda telah diinstal di jalur Anda
pip install git+git://github.com/pypiserver/pypiserver.git
Perintah PYPI-Server memiliki perintah pembaruan yang mencari pembaruan paket yang tersedia. Ini memindai direktori paket untuk paket dan pencarian yang tersedia di pypi.org untuk pembaruan. Tanpa opsi lebih lanjut PYPI-Server Update hanya akan mencetak daftar perintah yang harus dijalankan untuk mendapatkan versi terbaru dari setiap paket. Output terlihat seperti:
$ ./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
Ini pertama kali mencetak untuk setiap paket satu karakter setelah memeriksa versi yang tersedia di PYPI. Dot (.) Berarti paket ini terkini, 'U' berarti paket dapat diperbarui dan 'e' berarti daftar rilis pada PYPI kosong. Setelah itu menunjukkan baris perintah PIP yang dapat digunakan untuk memperbarui satu paket. Salin dan tempel itu atau jalankan PYPI -Server Update -X untuk benar -benar menjalankan perintah tersebut. Anda perlu menginstal PIP agar itu berfungsi.
Menentukan opsi -U tambahan juga akan memungkinkan kandidat alpha, beta dan rilis untuk diunduh. Tanpa opsi ini rilis ini tidak akan dipertimbangkan.
Penting
Secara default, Pypiserver memindai seluruh direktori paket setiap kali permintaan HTTP yang masuk terjadi. Ini bukan masalah bagi sejumlah kecil paket, tetapi menyebabkan perlambatan yang nyata saat menyajikan ribuan paket.
Jika Anda mengalami masalah ini, speedup yang signifikan dapat diperoleh dengan memungkinkan fungsionalitas caching direktori Pypiserver. Satu -satunya persyaratan adalah menginstal paket Watchdog , atau dapat diinstal selama instalasi Pypiserver , dengan menentukan opsi Cache Extra ::
pip install pypiserver[cache]
Speedup tambahan dapat diperoleh dengan menggunakan fungsionalitas caching builtin webserver Anda. Misalnya, jika Anda menggunakan nginx
sebagai proxy terbalik seperti yang dijelaskan di bawah di Behind a reverse proxy
, Anda dapat dengan mudah mengaktifkan caching. Misalnya, untuk memungkinkan Nginx untuk cache hingga 10 gigabyte data hingga 1 jam ::
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 ;
}
}
Tip
Menggunakan caching server web sangat membantu jika Anda memiliki volume permintaan tinggi. Menggunakan caching nginx, instalasi Pypiserver dunia nyata dapat dengan mudah mendukung lebih dari 1000 unduhan paket/menit pada beban puncak.
Ada berbagai opsi untuk menangani awal otomatis Pypiserver saat startup sistem. Dua yang paling umum adalah SystemD dan Supervisor untuk Sistem Linux. Untuk Windows membuat layanan dengan skrip bukanlah tugas yang mudah tanpa alat pihak ketiga seperti NSSM .
SystemD diinstal secara default pada sebagian besar sistem Linux modern dan dengan demikian, ini merupakan pilihan yang sangat baik untuk mengelola proses Pypiserver. Contoh file konfigurasi untuk systemd dapat dilihat di bawah
[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
Menyesuaikan jalur dan menambahkan file ini sebagai pypiserver.service ke direktori SystemD/System Anda akan memungkinkan manajemen proses PYPISERVER dengan SystemCTL , misalnya SystemCTL mulai Pypiserver .
Informasi yang lebih berguna tentang SystemD dapat ditemukan di https://www.digitalocean.com/community/tutorials/how-to-use-systemctl-to-manage-systemd-services-and-itit
Supervisor memiliki manfaat menjadi paket Python murni dan dengan demikian, ia memberikan dukungan lintas-platform yang sangat baik untuk manajemen proses. Contoh file konfigurasi untuk pengawas diberikan di bawah ini
[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
Dari sana, prosesnya dapat dikelola melalui Supervisord menggunakan Supervisorctl .
Untuk Windows Unduh NSSM dari https://nsssm.cc unzip ke lokasi yang diinginkan seperti file program. Putuskan apakah Anda akan menggunakan win32
atau win64
, dan menambahkan exe
itu ke PATH
lingkungan.
Buat start_pypiserver.bat
pypi-server run -p 8080 C: P ath T o P ackages &
Tip
Uji file batch dengan menjalankannya terlebih dahulu sebelum membuat layanan. Pastikan Anda dapat mengakses server dari jarak jauh, dan menginstal paket. Jika Anda bisa, lanjutkan, jika tidak memecahkan masalah sampai Anda bisa. Ini akan memastikan Anda tahu server berfungsi, sebelum menambahkan NSSM ke dalam campuran.
Dari prompt perintah
nssm install pypiserver
Perintah ini akan meluncurkan aplikasi NSSM GUI
Path: C: P ath T o s tart_pypiserver.bat
Startup directory: Auto generates when selecting path
Service name: pypiserver
Ada lebih banyak tab, tetapi itu adalah pengaturan dasar. Jika layanan harus berjalan dengan kredensial login tertentu, pastikan Anda memasukkan kredensial tersebut di tab Logon.
Mulailah layanan
nssm start pypiserver
Tip
Perintah bermanfaat lainnya
nssm --help
nssm stop < servicename >
nssm restart < servicename >
nssm status < servicename >
Untuk informasi terperinci, silakan kunjungi https://nssm.cc
Botol server web yang mendukung banyak server WSGI, antara lain, pasta , ceri , bengkok , dan WSGIREF (bagian Python); Anda memilihnya menggunakan bendera --sver .
Anda dapat melihat semua server WSGI yang didukung menggunakan kode interaktif berikut
>> > 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' ]
Jika tidak ada server di atas yang sesuai dengan kebutuhan Anda, adon hanya PYPISERVER: Metode App () yang mengembalikan WSGI-App internal tanpa memulai server-Anda dapat mengirimkannya ke server WSGI yang Anda sukai. Baca juga bagian yang memanfaatkan API.
Beberapa contoh diberikan di bawah ini - Anda mungkin menemukan detail lebih lanjut di situs botol.
Untuk menggunakan Apache2 Anda dengan Pypiserver , lebih suka menggunakan mod_wsgi seperti yang dijelaskan dalam dokumentasi botol.
Catatan
Jika Anda memilih untuk menggunakan MOD_PROXY , keberatan Anda dapat menabrak masalah dengan jalur awalan (lihat #155).
Beradaptasi dan tempatkan konfigurasi Apache berikut baik ke dalam ruang lingkup tingkat atas, atau di dalam beberapa <VirtualHost>
(disumbangkan oleh Thomas Waldmann):
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 >
atau jika menggunakan Apache yang lebih lama <2.4 , ganti bagian terakhir dengan ini ::
< Directory /yoursite/wsgi >
Order deny,allow
Allow from all
< /Directory >
Kemudian buat file /yoursite/cfg/pypiserver.wsgi dan pastikan bahwa pengguna dan grup WSGIDAONMPROCESS Directive ( PYPISRV: PYPISRV dalam contoh) memiliki izin baca di atasnya
import pypiserver
conf = pypiserver . default_config (
root = "/yoursite/packages" ,
password_file = "/yoursite/htpasswd" , )
application = pypiserver . app ( ** conf )
[! Tip] Jika Anda telah menginstal PYPISERVER di VirtualEnv, ikuti instruksi MOD_WSGI dan persiapkan kode Python di atas dengan yang berikut ini
import site site . addsitedir ( '/yoursite/venv/lib/pythonX.X/site-packages' )
Catatan
Untuk alasan keamanan, perhatikan bahwa Direktor Direktori memberikan akses ke direktori yang memegang skrip start-up WSGI , sendirian; tidak ada yang lain.
Catatan
Untuk mengaktifkan dukungan HTTPS di Apache, konfigurasikan arahan yang berisi konfigurasi WSGI untuk menggunakan SSL.
Perintah berikut menggunakan Gunicorn untuk memulai Pypiserver
gunicorn -w4 ' pypiserver:app(root="/home/ralf/packages") '
atau saat menggunakan beberapa akar
gunicorn -w4 ' pypiserver:app(root=["/home/ralf/packages", "/home/ralf/experimental"]) '
Tempel memungkinkan untuk menjalankan beberapa aplikasi WSGI di bawah jalur URL yang berbeda. Oleh karena itu, dimungkinkan untuk melayani set paket yang berbeda di jalur yang berbeda.
Contoh Tempel. Iini berikut dapat digunakan untuk melayani paket yang stabil dan tidak stabil di jalur yang berbeda
[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 = -
Catatan
Anda perlu menginstal beberapa dependensi lagi agar ini berfungsi, seperti ::
pip install paste pastedeploy gunicorn pypiserver
Server kemudian dapat memulai
gunicorn_paster paste.ini
Anda dapat menjalankan Pypiserver di belakang proxy terbalik juga.
Perpanjang konfigurasi nginx Anda
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 ;
}
}
Pada Pypiserver 1.3, Anda juga dapat menggunakan header X-Forwarded-Host
di konfigurasi proxy terbalik Anda untuk memungkinkan mengubah URL dasar. Misalnya jika Anda ingin meng -host pypiserver di bawah jalur tertentu di server Anda
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 ;
}
}
Menggunakan proxy terbalik adalah cara yang lebih disukai untuk mendapatkan Pypiserver di belakang HTTPS. Misalnya, untuk menempatkan Pypiserver di belakang HTTPS pada port 443, dengan pengalihan http otomatis, menggunakan 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 ;
}
}
Tip
Silakan lihat dokumen HTTPS NGINX untuk lebih jelasnya.
Mendapatkan dan menjaga sertifikat Anda terkini dapat disederhanakan menggunakan, misalnya, menggunakan certbot dan letsencrypt.
Dimungkinkan juga untuk menggunakan Traefik untuk menempatkan Pypiserver di belakang HTTPS pada port 443, dengan pengalihan HTTP otomatis menggunakan Docker Compose. Silakan lihat contoh Docker-Compose.yml yang disediakan untuk informasi lebih lanjut.
Untuk memungkinkan penyedia otentikasi ad-hoc atau menggunakan server WSGI yang tidak didukung oleh botol di luar kotak, Anda perlu meluncurkan Pypiserver melalui API-nya.
Titik entri utama untuk mengkonfigurasi PYPISERVER adalah fungsi PYPISERVER: APP (). Fungsi ini mengembalikan aplikasi WSGI internal yang kemudian saya kirimkan ke server WSGI yang Anda sukai.
Untuk mendapatkan semua PYPISERVER: APP () Kata kunci dan penjelasannya, baca fungsi PYPISERVER: DEFAULT_CONFIG ()
Akhirnya, untuk memulai server WSGI dengan aplikasi yang dikonfigurasi, memohon fungsi botol: Jalankan (aplikasi, host, port, server) . Perhatikan bahwa Pypiserver dikirimkan dengan salinan botolnya sendiri; Untuk menggunakannya, impor seperti itu: dari botol impor Pypiserver
Kata kunci auther dari fungsi Pypiserver: app () mungkin hanya diatur menggunakan API. Ini bisa dipanggil yang mengembalikan boolean saat melewati nama pengguna dan kata sandi untuk permintaan yang diberikan.
Misalnya, untuk mengotentikasi pengguna berdasarkan file /etc /passwd di bawah UNIX, Anda dapat mendelegasikan keputusan tersebut ke pustaka Python-Pam dengan mengikuti langkah-langkah ini:
Pastikan modul Python-Pam diinstal
pip install python-pam
Buat skrip Python di sepanjang baris ini
$ 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]
Memohon skrip Python untuk pemula Pypiserver
python pypiserver-start.py
Catatan
Modul Python-Pam, membutuhkan akses baca ke /etc /shadow file; Anda dapat menambahkan pengguna di mana Pypiserver berjalan ke grup bayangan , dengan perintah seperti ini: sudo usermod -a -g shadow pypy -user .
Interpreter Micropython untuk perangkat tertanam dapat menginstal paket dengan modul Upip.py. Modul ini menggunakan JSON-endpoint khusus untuk mengambil informasi paket. Titik akhir ini didukung oleh Pypiserver .
Itu dapat diuji dengan port unix micropython
cd micropython
ports/unix/micropython -m tools.upip install -i http://my-server:8080 -p /tmp/mymodules micropython-foobar
Menginstal paket dari penggantian perangkat tertanam berfungsi dengan cara ini:
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" )
Informasi lebih lanjut tentang micropython-packaging dapat ditemukan di sini: https://docs.micropython.org/en/latest/reference/packages.html
Pypiserver menyediakan titik akhir kesehatan default di /kesehatan . Itu selalu mengembalikan 200 OK jika layanan sudah habis. Kalau tidak, itu berarti bahwa layanan tidak responsif.
Selain itu, Pypiserver memungkinkan pengguna untuk menyesuaikan titik akhir kesehatan. Karakter alfanumerik, tanda hubung, tebasan ke depan dan garis bawah diizinkan dan titik akhir tidak boleh tumpang tindih dengan rute yang ada. Contoh yang valid: /Healthz , /Health /Live-1 , /API_Health , /Action /Health
Jalankan Pypiserver dengan argumen --Dealth-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" )
Coba curl http: // localhost: 8080/aksi/kesehatan
Untuk membuat salinan repositori, gunakan
git clone https://github.com/pypiserver/pypiserver.git
cd pypiserver
Untuk menerima perubahan selanjutnya, pada folder di atas, gunakan:
git pull
Penting
Pypiserver tidak mengimplementasikan API lengkap seperti yang terlihat di PYPI. Ini mengimplementasikan cukup untuk membuat easy_install , instalasi PIP , dan mencari pekerjaan.
Keterbatasan berikut diketahui:
Silakan gunakan Bugtracker GitHub untuk bug lain yang Anda temukan.
Ada banyak proyek lain, yang memungkinkan Anda menjalankan server PYPI Anda sendiri. Jika Pypiserver tidak bekerja untuk Anda, berikut ini adalah salah satu alternatif yang paling populer:
Devpi-Server: Server Caching PYPI.org cepat yang andal, bagian dari server indeks PYPI gaya GitHub yang komprehensif dan alat meta pengemasan. (Versi: 2.1.4, Tanggal Akses: 8/3/2015)
Periksa pertanyaan ini: Bagaimana cara menggulung pypi saya sendiri
Proyek -proyek ini dulunya merupakan alternatif untuk Pypiserver tetapi sekarang tidak dirawat atau diarsipkan.
PIP2PI Alat CMD-line sederhana yang membangun folder lokal yang kompatibel dengan PYPI dari persyaratan PIP
Flask-Pypi-Proxy Proxy untuk PYPI yang juga memungkinkan mengunggah paket khusus.
Meskipun bukan alternatif langsung untuk penggunaan PYPISERVER sebagai server indeks, berikut ini adalah daftar proyek perangkat lunak terkait yang mungkin ingin Anda ketahui:
PYPI-Uploader: Utilitas baris perintah untuk mengunggah paket ke Pypiserver Anda dari PYPI tanpa harus menyimpannya secara lokal terlebih dahulu.
Twine: Utilitas baris perintah untuk berinteraksi dengan PYPI atau Pypiserver .
Gudang: Perangkat lunak yang memberi kekuatan pada PYPI itu sendiri. Secara umum tidak dimaksudkan untuk dijalankan oleh pengguna akhir.
Pypiserver berisi salinan botol yang tersedia di bawah lisensi MIT, dan bagian yang tersisa didistribusikan di bawah lisensi ZLIB/LIBPNG. Lihat file lisensi.txt .