web-dev-qa-db-ja.com

ミラーなしでローカルの独自のpypiリポジトリインデックスを作成する方法は?

独自のpythonパッケージがあり、 https://pypi.python.org/simple/

セキュリティ上の理由により、ミラーなしでローカル専用に作成したいこのリポジトリは、Apacheの制御下に置かれます

pypimirror looksコマンドは一度初期化する必要があり、ミラーリングする必要があります。

ローカルのpythonパッケージに基づいてPyPiシンプルインデックスを生成するにはどうすればよいですか。

このための他の簡単なスクリプトはありますか?

32
Larry Cai

ここに答えるように頼んだので:

を見てみましょう - pip2pi 、まさにあなたが探しているもののようです。

20
K Z

私たちの会社でも同様のニーズがありました。基本的に、「クローズドソース」パッケージをインデックスにアップロードしながら、それらをPyPIにあるかのようにインストールする方法を教えてください。

PyPIキャッシュ(PyPIからアクセスするパッケージはサーバーにキャッシュされます)として機能する devpi というプロジェクトと、強力で高速なインデックスサーバーを後援しています。ドキュメントは http://doc.devpi.net/latest/ で入手できます。

ロードマップの次は、マルチジオ配置のミラーリングです。マシンでタイヤをキックするには、約5分かかります(クイックスタートガイドをご覧ください)。最後に、devpiはpipとeasy_installの両方と互換性があります(つまり、マシンにdevpiクライアントをインストールする必要はありません)。

この助けを願っています。

24
Laurent Brack

ミラーについて特別なものはありません。mod_rewriteを使用して自分でミラーをセットアップできます。

  1. URLにマップされているディレクトリにパッケージをダンプします。ここでは、/url/to/my/pypi/の例を使用しています。フォルダー階層は/foo/bar/simple/[name of package]/[name of tarball]である必要があります

  2. 以下を.htaccessまたはパッケージがあるディレクトリのグローバル構成に追加します。行の最後のブロックは、グローバルpypiインデックスへのフォールバックです。

    Options +Indexes
    
    RewriteEngine On
    
    RewriteRule ^/robots.txt - [L]
    RewriteRule ^/icons/.* - [L]
    RewriteRule ^/index\..* - [L]
    
    RewriteCond /foo/bar/simple/ !-f
    RewriteCond /foo/bar/simple/ !-d
    RewriteRule ^/(.*)/?$ http://pypi.python.org/ [R,L]
    
  3. ~/.pip/pip.confを更新して、新しいリポジトリを指すようにします。

    [global]
    index-url = http://localhost/url/to/my/pypi/
    

    または、コマンドラインで-i http://localhost/url/to/my/pypi/オプションを使用します。

7
Burhan Khalid

Simplepypiの実行について話している場合は、パッケージを追加して提供するサーバーがあります。ドキュメントを引用するには:

- Running this on the setup.py of your favorite package:

    python setup.py sdist upload -r local

いずれかを使用する場合os.walkまたはglob.globローカルサイトパッケージディレクトリで、setup.py各パッケージ/ディレクトリ内で、それらに対して上記を呼び出します。

それらの.htmlリストで完全なtar.gzファイルのディレクトリを作成する必要がある場合は、site-packagesディレクトリの最上位でglob.globを使用できます-tar.gz各ディレクトリを順番に追加し、結果を追加しますファイル名をリストに追加すると、そのリストからindex.htmlを生成できます。

これには、多数の template エンジンのいずれかを使用するか、自分で生成できます。

import glob
filelist = glob.glob("*.tar.gz")
tags = ['<A href="file:Where/%s">%s</A>' % (s,s) for s in tags]
head = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE></TITLE>
<META NAME="Generator" CONTENT="Python Script">
<META NAME="Keywords" CONTENT="Cheeseshop">
<META NAME="Description" CONTENT="List of local python packages">
</HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?">
"""
tail = """</BODY></HTML>"""
tags.insert(0,head)
tags.append(tail)
page = "\n".join(tags)

次に、ページを保存または提供します。

3
Steve Barnes

最も簡単な方法は、パッケージのdistfileをパッケージ名の付いたdirsに整理し、単純なHTTPサーバーを実行することです。追加のパッケージは必要ありません。Pythonのstdlibで十分です。ディレクトリ構造の例:

└── repodir
    ├── setuptools
    │   └── setuptools-38.1.0-py2.py3-none-any.whl 
    │   └── setuptools-38.1.0.Zip
    │   └── setuptools-39.2.0-py2.py3-none-any.whl 
    │   └── setuptools-39.2.0.Zip
    ├── wheel
    │   └── wheel-0.31.1-py2.py3-none-any.whl 
    ...

サーバーを起動します。

$ cd repodir/
$ python3 -m http.server 9000
$ # or for Python 2:
$ python2 -m SimpleHTTPServer 9000

ローカルリポジトリが稼働しています。これで、リポジトリをpipに渡すことができます。

$ pip install wheel --extra-index-url=http://127.0.0.1:9000

または、pip.conf毎回入力しないようにするには:

# pip.conf
[global]
extra-index-url=http://127.0.0.1:9000

リファレンス: Pythonパッケージングユーザーガイド、独自のシンプルなリポジトリをホストする

3
hoefling