【问题标题】:PyInstaller not working with module pycountry?PyInstaller 不能与模块 pycountry 一起使用?
【发布时间】:2021-01-03 08:01:56
【问题描述】:

通常 PyInstaller 对我来说可以正常工作,但我发现使用 python 模块 pycountry 时出现问题。

我尝试了这个非常简单的代码:

import pycountry
land="DE"
country = pycountry.countries.get (alpha_2=land)
print(country.name)

用pyinstaller编译:

pyinstaller --onefile xyz.py

但我想执行编译后的 exe 我得到这个错误:

Traceback (most recent call last):
  File "temp2.py", line 1, in <module>
    import pycountry
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "c:\users\polzi\appdata\local\programs\python\python37\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 623, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\pycountry\__init__.py", line 12, in <module>
  File "site-packages\pkg_resources\__init__.py", line 481, in get_distribution
  File "site-packages\pkg_resources\__init__.py", line 357, in get_provider
  File "site-packages\pkg_resources\__init__.py", line 900, in require
  File "site-packages\pkg_resources\__init__.py", line 786, in resolve
pkg_resources.DistributionNotFound: The 'pycountry' distribution was not found and is required by the application
[45548] Failed to execute script temp2

是否有任何解决方法可以让 pycountry 功能与 pyinstaller 一起运行?

更新: 为我的问题找到了解决方法/解决方案-

  1. 使用命令生成temp2.​​spec文件
  2. 从 PyInstaller.utils.hooks 更改 filename.spec => import copy_metadata(在标题中)=> 在 a = Analysis(...) 部分中将“datas = []”更改为
  3. 如上使用pyinstaller编译exe

替代方案:编译程序之前 - 更改规范 - 使用命令 - Rapid1898 刚刚编辑

【问题讨论】:

    标签: python module pyinstaller


    【解决方案1】:

    您的更新对我很有帮助。但我需要一个变体才能让它工作。我只是为了让这些想法更清楚地展示 pycountry 库正常工作必须完成的方式。

    1. 使用命令pyi-makespec --onefile name-of-your-file.py 生成.spec 文件 名称为 name-of-your-file.spec
    2. 使用您喜欢的文本编辑器打开 name-of-your-file.spec。
      • 在 .spec 文件的顶部添加以下行 from PyInstaller.utils.hooks import copy_metadata
      • datas = [] 替换为datas = copy_metadata("pycountry")
    3. 然后使用以下命令重建PyInstaller --clean name-of-your-file.spec

    希望对遇到同样错误的人有所帮助。

    您可以阅读using spec files 的文档。

    你可以在这个link找到同样的过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2020-01-03
      • 1970-01-01
      • 2021-02-13
      • 2016-08-31
      • 1970-01-01
      • 2014-01-03
      相关资源
      最近更新 更多