相对进口和py2app?
Relative imports and py2app?
这是我的文件布局方式:
| setup.py
+ myapp
| __init__.py
| myapp.py
| version.py
(希望这很清楚...不要太复杂,我不认为。)
这是 myapp.py 包含的内容:
from fingui import Label
from .version import __version__
Label('I am version: ' + __version__)
如果我在可以看到 setup.py
的目录中,则以下工作正常:
python -m myapp.myapp
当我尝试使用此将其打包为应用程序时:
python setup.py py2app
然后 运行 它,我在导入版本的行上收到此错误消息:
ValueError: Attempted relative import in non-package
这里是setup.py
的内容:
exec(open('myapp/version.py').read())
from setuptools import setup
setup(app = 'myapp/myapp.py',
setup_requirements = ['py2app'],
name = 'MyApp',
version = __version__)
如果我查看 py2app
生成的应用程序包,我看到 myapp.py
被放置在包中,但 version.py
和 __init__.py
无处可去找到了。
组织文件的正确方法是什么?我怎样才能让 py2app
and/or setup
识别哪些文件是必需的以及将它们放在哪里?
此外,当我们讨论这个主题时,我如何让它包含 fingui?这是我使用 pip 安装的库...我认为 py2app
可能会将其误认为是标准库模块或其他东西,所以不将其包含在我的应用程序包中?
尝试以这种方式导入包:import fingui 而不是 from fingui import *
我能够通过以下方法解决此问题:
| main.py <- New file I added - details below.
| setup.py <- I changed a bit in here.
+ myapp <- Same exact contents as before - I changed nothing.
我创建了一个新文件 main.py
,它位于 myapp
包之外。在setup.py
中,我告诉它main.py
是app,myapp
是package。
main.py
的内容:
from myapp import myapp
就是这样。
setup.py
的新内容,以及更改行的评论。
exec(open('myapp/version.py').read())
from setuptools import setup
setup(app = 'main.py', ### This now points at main.py instead of myapp/myapp.py
options = {'py2app': {'packages': ['myapp']}}, ### This line is all new.
setup_requirements = ['py2app'],
name = 'MyApp',
version = __version__)
我仍然有问题,它似乎没有将 myapp
或 fingui
复制到实际的 MyApp.app
包中......我认为它依赖于 MyApp.app/Contents/Resources/site.pyc
...如果我尝试分发我的应用程序,这显然会中断。
这是我的文件布局方式:
| setup.py
+ myapp
| __init__.py
| myapp.py
| version.py
(希望这很清楚...不要太复杂,我不认为。)
这是 myapp.py 包含的内容:
from fingui import Label
from .version import __version__
Label('I am version: ' + __version__)
如果我在可以看到 setup.py
的目录中,则以下工作正常:
python -m myapp.myapp
当我尝试使用此将其打包为应用程序时:
python setup.py py2app
然后 运行 它,我在导入版本的行上收到此错误消息:
ValueError: Attempted relative import in non-package
这里是setup.py
的内容:
exec(open('myapp/version.py').read())
from setuptools import setup
setup(app = 'myapp/myapp.py',
setup_requirements = ['py2app'],
name = 'MyApp',
version = __version__)
如果我查看 py2app
生成的应用程序包,我看到 myapp.py
被放置在包中,但 version.py
和 __init__.py
无处可去找到了。
组织文件的正确方法是什么?我怎样才能让 py2app
and/or setup
识别哪些文件是必需的以及将它们放在哪里?
此外,当我们讨论这个主题时,我如何让它包含 fingui?这是我使用 pip 安装的库...我认为 py2app
可能会将其误认为是标准库模块或其他东西,所以不将其包含在我的应用程序包中?
尝试以这种方式导入包:import fingui 而不是 from fingui import *
我能够通过以下方法解决此问题:
| main.py <- New file I added - details below.
| setup.py <- I changed a bit in here.
+ myapp <- Same exact contents as before - I changed nothing.
我创建了一个新文件 main.py
,它位于 myapp
包之外。在setup.py
中,我告诉它main.py
是app,myapp
是package。
main.py
的内容:
from myapp import myapp
就是这样。
setup.py
的新内容,以及更改行的评论。
exec(open('myapp/version.py').read())
from setuptools import setup
setup(app = 'main.py', ### This now points at main.py instead of myapp/myapp.py
options = {'py2app': {'packages': ['myapp']}}, ### This line is all new.
setup_requirements = ['py2app'],
name = 'MyApp',
version = __version__)
我仍然有问题,它似乎没有将 myapp
或 fingui
复制到实际的 MyApp.app
包中......我认为它依赖于 MyApp.app/Contents/Resources/site.pyc
...如果我尝试分发我的应用程序,这显然会中断。