【问题标题】:Relative imports and py2app?相对进口和py2app?
【发布时间】:2016-01-30 04:06:56
【问题描述】:

这是我的文件的布局方式:

| 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 和/或setup 识别哪些文件是必要的以及将它们放在哪里?

另外,当我们讨论这个主题时,如何让它包含 fingui?那是我使用 pip 安装的库...我认为 py2app 可能将其误认为是标准库模块或其他东西,所以不将其包含在我的应用程序包中?

【问题讨论】:

    标签: python setuptools setup.py py2app


    【解决方案1】:

    我可以用以下方法解决这个问题:

    | 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 是应用程序,myapp 是一个包。

    main.py的内容:

    from myapp import myapp
    

    就是这样。

    setup.py 的新内容,更改后的行带有 cmets。

    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__)
    

    我仍然有一个问题,它似乎没有将myappfingui 复制到实际的MyApp.app 包中...我认为它依赖于MyApp.app/Contents/Resources/site.pyc...如果我尝试分发我的应用程序。

    【讨论】:

      【解决方案2】:

      尝试以这种方式导入包:import fingui 而不是 from fingui import *

      【讨论】:

      • 是版本导入有问题,不是fingui。
      猜你喜欢
      • 2013-01-23
      • 1970-01-01
      • 2020-08-28
      • 2020-09-02
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多