OSX (py2app を使用) でアプリを Debian パッケージとして配布したいと考えています。
私のアプリの構造は次のようなものです:
app/
debian/
<lots of debian related stuff>
scripts/
app
app/
__init__.py
app.py
mod1/
__init__.py
a.py
mod2/
__init__.py
b.py
私の setup.py は次のようになります。
from setuptools import setup
import os
import os.path
osname = os.uname()[0]
if osname == 'Darwin':
APP = ['app/app.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}
setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)
elif osname == 'Linux':
setup(
name = "app",
version = "0.0.1",
description = "foo bar",
packages = ["app", "app.mod1", "app.mod2"],
scripts = ["scripts/app"],
data_files = [
("/usr/bin", ["scripts/app"]),
]
)
次に、b.py (これは OSX 上にあります) で:
from app.mod2.b import *
私は得る:
ImportError: No module named mod2.b
基本的に、mod2 は mod1 にアクセスできません。Linux では、Python モジュール 'app' が /usr/shared/pyshared にグローバルにインストールされているため、問題はありません。しかし、OSX では、アプリは明らかに py2app によって構築された自己完結型の .app になります。OSX で Python アプリを配布する際のベスト プラクティスはありますか?
編集:b.pyで次のようなハックも試しました:
from ..mod2.b import *
ValueError: Attempted relative import beyond toplevel package
Edit2:これに関連しているようです Pythonで相対インポートを行うには?