【问题标题】:Python cx_freeze issue with resourcesPython cx_freeze 资源问题
【发布时间】:2015-04-15 07:18:35
【问题描述】:

我正在使用cx_freeze 模块来创建安装程序和可执行文件。这似乎工作正常,但在运行可执行文件时,我收到以下错误和回溯。

D:\>"app.exe"
Traceback (most recent call last):
  File "C:\Program Files\Python 3.3\lib\site-packages\pkg_resources\__init__.py", line 421, in get_provider
    module = sys.modules[moduleOrReq]
KeyError: 'resources.images'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files\Python 3.3\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 27, in <module>
    exec(code, m.__dict__)
  File "main.py", line 8, in <module>
  File "C:\Program Files\Python 3.3\lib\site-packages\pkg_resources\__init__.py", line 1148, in resource_filename
    return get_provider(package_or_requirement).get_resource_filename(
  File "C:\Program Files\Python 3.3\lib\site-packages\pkg_resources\__init__.py", line 423, in get_provider
    __import__(moduleOrReq)
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1567, in _find_and_load
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1514, in _find_and_load_unlocked
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 313, in _call_with_frames_removed
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1567, in _find_and_load
  File "C:\Python\64-bit\3.3\lib\importlib\_bootstrap.py", line 1531, in _find_and_load_unlocked
ImportError: No module named 'resources'

这很奇怪,因为通过 Python 运行脚本时我没有收到这样的错误。 (具体来说,是 PyCharm 上的 Shift-F10。)

这是我在回溯中写的唯一脚本:

main.py

from tkinter import Tk
from client import Client
from pkg_resources import resource_filename

root = Tk()
root.wm_title("MyApp")
root.wm_iconbitmap(root, resource_filename('resources.images', 'eternal_logo.ico'))
root.wm_iconbitmap()
client = Client(root)
root.mainloop()

我的 setup.py 看起来像:

setup.py

from setuptools import find_packages
from pkg_resources import resource_filename
from cx_Freeze import setup, Executable

setup(
    name='MyApp',
    version='0.3-alpha',
    packages=find_packages(),
    package_data={'': ['*.png', '*.gif', '*.ico']},
    executables=[
        Executable(
            "main.py",
            icon=resource_filename('resources.images', 'eternal_logo.ico'),
            targetName="app.exe"
        )
    ]
)

最后我的文件结构(缩写)看起来像:

MyApp/
  bin/
  build/
  client/
    __init__.py
    ..
  dist/
  docs/
  preferences/
    __init__.py
    ..
  resources/
    __init__.py
    images/
      __init__.py
  main.py
  setup.py
  __init__.py

【问题讨论】:

    标签: python python-3.3 cx-freeze


    【解决方案1】:

    这是不久前的事,但由于我再次遇到类似的问题,所以我又回到了这个问题。

    我相信解决此问题的原因是将以下 build_exe_options 添加到 setup.py

    build_exe_options = {
        "include_files": [
            ('resources', 'resources'),
            ('config.ini', 'config.ini')
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 2012-02-22
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      相关资源
      最近更新 更多