2015-01-15 5 views
7

ピップはどこで「卵」ではなく「フラット」としてインストールする必要がありますか。pip:時々、卵としてインストールされることがあります。ファイルとしてインストールされることがあります。

私にとってはランダムなようです。時にはそれは卵として、時には平らにインストールされます。

pip help installは、卵のインストールを強制するオプション​​のみを示しています。しかし、私は--flatオプションを見つけることができませんでした。

パッケージは自身のpypiserverからであり、このようにアップロード:bdist_eggが、ここで使用されますなぜ私にはわからない

Best match: foo-client 2015.2 
Downloading https://installserver:40443/pypi/packages/foo_client-2015.2.tar.gz 
Processing foo_client-2015.2.tar.gz 
Writing /home/bar_eins_daad/tmp/easy_install-z20B7b/foo_client-2015.2/setup.cfg 
Running foo_client-2015.2/setup.py -q bdist_egg --dist-dir /home/bar_eins_daad/tmp/easy_install-z20B7b/foo_client-2015.2/egg-dist-tmp-GO1snX 

:インストール時のピップの

python setup.py sdist upload -r internal

出力。それは強制的に卵のインストールを作成しますか?

setup.pyは、setuptoolsではなく、distutilsを使用します。

当社pypiserverのパッケージには、次のようになります。

tar -tzf packages/foo_client-2015.3.tar.gz 

内容:

foo_client-2015.2/ 
foo_client-2015.2/foo_client.egg-info/ 
foo_client-2015.2/foo_client.egg-info/SOURCES.txt 
foo_client-2015.2/foo_client.egg-info/top_level.txt 
foo_client-2015.2/foo_client.egg-info/dependency_links.txt 
foo_client-2015.2/foo_client.egg-info/PKG-INFO 
foo_client-2015.2/setup.cfg 
foo_client-2015.2/PKG-INFO 
foo_client-2015.2/foo_client/ 
foo_client-2015.2/foo_client/models.py 
... 

背景

ピップは、zip形式の卵がインストールされている場合、時にはパッケージを複数回インストールしているようです。

更新

私は、パッケージが卵としてインストールされるどの条件の下で見つかった:それはpython setup.py develop(それがinstall_requires依存である)を介してインストールされる場合。

pip install foo_clientを使用すると、フラットにインストールされます(希望する方法)。

アップデート2

非常に醜い部分:卵がインストールされる場合は、古いバージョンは削除されません平らにインストールされています。

バージョン:1.5.6

+0

あなたは手の込んだことができます:

は注目すべきは、これが唯一うまく働いたが、私はsetup.cfgに入れ、python setup.py installで起きていないpip install . guettliの修正@? '--egg'オプションは、例えばソース(デフォルト)からインストールするのではなく、利用可能であればeggをインストールするようにします。違いを示すいくつかのサンプルパッケージを提供できますか? –

+0

@MartijnPieters申し訳ありませんが、私たちのpypiserverは公開されていません。あなたに詳細を教える別の方法はありますか? – guettli

+1

この動作をまったく公開しているパッケージはありませんか? –

答えて

5

これは、なぜ私は時折圧縮された卵を得るのか、ときには紛らわしいのかという問題を解決しません。しかし、それは役に立ちます。

あなたはzip形式の卵のインストールを避けるために、あなたの~/.distutils.cfgでこれを使用することができます。

[easy_install] 
zip_ok = False 
1

PIP私は、これは卵のみ問題をインストール持っていた、そしてそれは私が私のパッケージのルートに__init__.pyを追加gitのに失敗していたが判明しました。

pip install . 

...しかし、これは失敗していました:これが働くだろうと私は狂気運転していた

mkdir /tmp/piptest 
cd /tmp/piptest 
git clone $OLDPWD . 
pip install . 

とても多くの非コミットのpycがあるのでdiff -r . $OLDPWDを使用して違いに気付くことは困難でしたファイルと開発ツールのスクリプトです。

これはおそらくこのOPの答えではありませんが、私はそれが私のように "卵をインストールするだけピップ"誰かを助けることを願っています。

2

パッケージの作成者は、setup.pyにフラグzip_safe=Falseを使用できます。あなたがパッケージを改善したいユーザであれば、あなたはpip install -e foo_packageしてインストールすることができ

setup(
    name = "HelloWorld", 
    ... 
    zip_safe = False, 
) 

-eオプションまたは--editableオプションは、編集可能なモード(setuptools "開発モード")でプロジェクトをインストールしますが、圧縮されません。これは、ソースからsite-packagesへのリンクを作成し、.../binスクリプトをコンパイルしますが、そこにあるソースをサイトパッケージにコピーしません。これらのパッケージは自動的に更新することはできません。パッケージをインストールする通常の方法ではなく、カスタマイズや修正が必要なパッケージに対してのみ、パッケージが意図されている主な理由です。

編集:彼らは純粋なPythonのではなく、彼らはまた、などのHTML、CSS、国際化リソースとテンプレート含まれているためDjangoは、そのアプリケーションのためのzip_safe=Falseを必要とし、一般的なフレームワークであるDjangoのに関連した質問ですか?

+0

悲しい、私はパッケージの著者ではない。今私は解決策を見つけました。 http://stackoverflow.com/questions/27964960/pip-why-sometimes-installed-as-egg-sometimes-installed-as-files/29127158#29127158を参照してください。 – guettli

0

Some docsは言う:最高のパフォーマンスを得るために

を、Pythonのパッケージは最高のzipファイルとしてインストールされています。

あなたは セットアップ()関数にzip_safe引数にTrueまたはFalse値を渡すことができ、またはあなたはそれを省略することができます。これを省略すると、bdist_egg コマンドはプロジェクトの内容を解析して、 がzipファイルで動作しないような条件を検出できるかどうかを確認します。

あなたのケースではうまくいかない限り、おそらく問題ありません。私のプロジェクトはファイルを読み込もうとしましたが、圧縮に失敗しました。

[easy_install] 
zip_ok = False 
関連する問題