特定のeggディレクトリを強制的に解凍する
-
21-09-2019 - |
質問
私は自分で構築した PyQt アプリケーションの Egg ディストリビューションを持っており、これには Sphinx で生成されたドキュメントが含まれています。アプリケーションからヘルプ ファイルを呼び出すと、QtWebKit.QWebView ウィンドウで sphinx Index.html が開きます。どうやら、index.html ファイルだけが Egg から OS の Egg ディレクトリに抽出されるようです (例:Windows では [..]\Application Data\Python-Eggs\)。
これらの他のファイルは解凍されないようなので、その結果、壊れた CSS、壊れた画像、壊れたリンクが発生します。これらはeggファイルには存在しますが、eggディレクトリには存在しません。
ここで何かが足りないのでしょうか?すべてのhtml、css、画像ファイルをすぐに強制的に解凍する方法はありますか?
解決
これを行う別の方法をすでに見つけたようですが、今後の参考のために、次のドキュメントにある回避策以外の自動的に行う方法を示します。 http://peak.telecommunity.com/DevCenter/setuptools#automatic-resource-extraction [強調追加]:
リソースが「実際の」ファイルであることを期待するツールを使用している場合、またはプロジェクトに、C 拡張機能がアクセスできると予想される非拡張ネイティブ ライブラリまたはその他のファイルが含まれている場合は、eager_resources 引数にそれらのファイルをリストする必要がある場合があります。設定する()、 ファイルが一緒に抽出されるようにする
したがって、この場合、やりたいことは次のようになります。
eager_resources=['doc/sphinx/build/html', 'doc/sphinx/build/html/index.html']
これにより、index.html を要求したときに 'html' ディレクトリが再帰的に抽出されます (例の 'doc' がトップレベルのパッケージであると仮定します)。
(詳細については、 eager_resources
ドキュメント内のキーワード http://peak.telecommunity.com/DevCenter/setuptools#new-and-changed-setup-keywords)
他のヒント
def get_help_url(self):
from pkg_resources import resource_filename
from doc import sphinx
import os
from PyQt4.QtCore import QUrl
html_path = resource_filename(sphinx.__name__, os.path.join('build', 'html'))
return QUrl(os.path.join(html_path, 'index.html'))
の代わりに
html = resource_filename(sphinx.__name__, os.path.join('build', 'html', 'index.html'))
return QUrl(html)
タグのトリックをしました
推定原因:そもそもすべてのファイルがeggに含まれているわけではありません。
.egg を解凍してこれを確認してください (Windows では、.zip ファイルに名前を変更する必要がある場合があります)。中身がすべて揃っているか確認してください。
卵の作り方を見てください。どのファイルを含めるかを setuptools に指示するために MANIFEST.in ファイルを使用しますか?そうでない場合は、setuptools による Subversion ファイルの自動組み込みを信頼している可能性があります。すべての Subversion 化されたファイルは自動的に Egg に置かれますが、Python ファイルはそうなりますが、残りはそうではありません。
Sphinx ドキュメントはおそらく生成されるため、Subversion には含まれず、自動的には組み込まれません。
2 つの解決策:
MANIFEST.in ファイルを使用して、含める必要があるすべてのファイルを手動で指定します (ワイルドカードは機能します)。完了している限りはフェイルセーフです。
または、html ファイルを package_data として指定します。を参照してください。 setuptools はどのファイルを sdist/bdist に保存するかをどのように決定しますか?