私たちの施設では py2app を広く使用して、依存関係の問題なしに簡単に内部展開できる自己完結型の .app パッケージを作成しています。私が最近気づいたことは、.app をビルドするときに、py2app がメイン ライブラリの .git ディレクトリを含め始めたことです。
たとえば、commonLib はルート Python ライブラリ パッケージであり、git リポジトリです。このパッケージの下には、データベース、ユーティリティなどのさまざまなサブパッケージがあります。
commonLib/
|- .git/ # because commonLib is a git repo
|- __init__.py
|- database/
|- __init__.py
|- utility/
|- __init__.py
# ... etc
from commonLib import xyz
Foo などの特定のプロジェクトで、共通のパッケージを使用するようにインポートを行います。py2app によるビルドは次のようになります。python setup.py py2app
したがって、私が目にしている最近の問題は、プロジェクト Foo のアプリをビルドするときに、 commonLib/.git/ 内のすべてがアプリに含まれていることがわかります。これは余分な肥大化です。py2app には excludes オプションがありますが、それは python モジュール用のようです。.git サブディレクトリを除外するのに何が必要なのか、または実際には何が原因で最初に含まれているのか、よくわかりません。
git リポジトリである python パッケージのインポートを使用しているときに、これを経験した人はいますか? 各プロジェクトの setup.py ファイルに変更はなく、commonLib は常に git リポジトリです。したがって、変数であると考えることができるのは、明らかに時間の経過とともにアップグレードされた py2app とその deps のバージョンだけです。
編集
現在、最新の py2app 0.6.4 を使用しています。また、私の setup.py は、しばらく前に py2applet から最初に生成されましたが、それ以来手動で構成され、すべての新しいプロジェクトのテンプレートとしてコピーされています。私はこれらのプロジェクトのすべてに PyQt4/sip を使用しているので、レシピの 1 つに問題があるのではないかと思いますか?
アップデート
最初の回答から、さまざまなexclude_package_data
設定の組み合わせを使用してこれを修正しようとしました。.git ディレクトリを強制的に除外するものはないようです。これは、私の setup.py ファイルが一般的にどのように見えるかのサンプルです:
from setuptools import setup
from myApp import VERSION
appname = 'MyApp'
APP = ['myApp.py']
DATA_FILES = []
OPTIONS = {
'includes': 'atexit, sip, PyQt4.QtCore, PyQt4.QtGui',
'strip': True,
'iconfile':'ui/myApp.icns',
'resources':['src/myApp.png'],
'plist':{
'CFBundleIconFile':'ui/myApp.icns',
'CFBundleIdentifier':'com.company.myApp',
'CFBundleGetInfoString': appname,
'CFBundleVersion' : VERSION,
'CFBundleShortVersionString' : VERSION
}
}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
私は次のようなことを試しました:
setup(
...
exclude_package_data = { 'commonLib': ['.git'] },
#exclude_package_data = { '': ['.git'] },
#exclude_package_data = { 'commonLib/.git/': ['*'] },
#exclude_package_data = { '.git': ['*'] },
...
)
アップデート #2
distutilsでmonkeypatchを行う独自の回答を投稿しました。それは醜く、好まれませんが、誰かが私にもっと良い解決策を提供できるまで、これが私が持っているものだと思います.