【问题标题】:How to solve 'dynamic module does not define module export function' error in Xcode kivy-ios?如何解决 Xcode kivy-ios 中的“动态模块未定义模块导出功能”错误?
【发布时间】:2019-09-13 05:41:41
【问题描述】:

我正在尝试在 iOS 中打包一个 python 应用程序。该应用程序非常简单,只有 1 行:

from firebase import firebase

我按照此链接的说明进行操作:

https://github.com/kivy/kivy-ios

Firebase 需要 pycrypto。所以我输入了

./toolchain.py build pycrypto

它失败了......所以我从文件夹 /usr/local/lib/python3.7/site-packages 复制并粘贴了 3 个文件夹:Crypto、cryptography、cryptography-2.7.dist-info 到桌面下的构建文件夹/kivy-ios。然后我输入:

./toolchain.py build pycrypto

它仍然失败......所以我使用了:

./toolchain.py pip install pycrypto

成功了!我进入 Xcode 并尝试将其推送到虚拟 iPhone XR。我收到以下错误,我不知道如何解决。请帮帮我!任何事情都非常感谢。

2019-09-13 01:24:40.859097-0400 kindact[56329:305598] [framework] CUIThemeStore: No theme registered with id=0
2019-09-13 01:24:41.060178-0400 kindact[56329:305598] Available orientation: KIVY_ORIENTATION=LandscapeLeft LandscapeRight Portrait PortraitUpsideDown
2019-09-13 01:24:41.060467-0400 kindact[56329:305598] Initializing python
/Users/hiencao/Library/Developer/CoreSimulator/Devices/9E046BFB-CB75-4394-BBBB-CD52178F0DEA/data/Containers/Bundle/Application/C9C66E4B-7DBA-409C-88FA-F0917B4D6681/kindact.app/kindact:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
2019-09-13 01:24:41.255757-0400 kindact[56329:305598] Running main.py: /Users/hiencao/Library/Developer/CoreSimulator/Devices/9E046BFB-CB75-4394-BBBB-CD52178F0DEA/data/Containers/Bundle/Application/C9C66E4B-7DBA-409C-88FA-F0917B4D6681/kindact.app/YourApp/main.pyc
Traceback (most recent call last):
  File "<string>", line 39, in load_module
  File "/Users/hiencao/Desktop/2/kivy-ios/dist/root/python3/lib/python3.7/imp.py", line 342, in load_dynamic
    return _load(spec)
  File "<frozen importlib._bootstrap>", line 696, in _load
  File "<frozen importlib._bootstrap>", line 670, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 583, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 1043, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: dynamic module does not define module export function (PyInit_cryptography_hazmat_bindings__constant_time)
Traceback (most recent call last):
  File "<string>", line 39, in load_module
  File "/Users/hiencao/Desktop/2/kivy-ios/dist/root/python3/lib/python3.7/imp.py", line 342, in load_dynamic
  File "<frozen importlib._bootstrap>", line 696, in _load
  File "<frozen importlib._bootstrap>", line 670, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 583, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 1043, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: dynamic module does not define module export function (PyInit_cryptography_hazmat_bindings__constant_time)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/hiencao/Desktop/2/kivy-ios/kindact-ios/YourApp/main.py", line 1, in <module>
  File "/Users/hiencao/Library/Developer/CoreSimulator/Devices/9E046BFB-CB75-4394-BBBB-CD52178F0DEA/data/Containers/Bundle/Application/C9C66E4B-7DBA-409C-88FA-F0917B4D6681/kindact.app/lib/python3.7/site-packages/firebase/__init__.py", line 14, in <module>
    import python_jwt as jwt
  File "/Users/hiencao/Library/Developer/CoreSimulator/Devices/9E046BFB-CB75-4394-BBBB-CD52178F0DEA/data/Containers/Bundle/Application/C9C66E4B-7DBA-409C-88FA-F0917B4D6681/kindact.app/lib/python3.7/site-packages/python_jwt/__init__.py", line 8, in <module>
    from jwcrypto.jws import JWS, JWSHeaderRegistry
  File "/Users/hiencao/Library/Developer/CoreSimulator/Devices/9E046BFB-CB75-4394-BBBB-CD52178F0DEA/data/Containers/Bundle/Application/C9C66E4B-7DBA-409C-88FA-F0917B4D6681/kindact.app/lib/python3.7/site-packages/jwcrypto/jws.py", line 8, in <module>
    from jwcrypto.jwa import JWA
  File "/Users/hiencao/Library/Developer/CoreSimulator/Devices/9E046BFB-CB75-4394-BBBB-CD52178F0DEA/data/Containers/Bundle/Application/C9C66E4B-7DBA-409C-88FA-F0917B4D6681/kindact.app/lib/python3.7/site-packages/jwcrypto/jwa.py", line 10, in <module>
    from cryptography.hazmat.primitives import constant_time, hashes, hmac
  File "/Users/hiencao/Library/Developer/CoreSimulator/Devices/9E046BFB-CB75-4394-BBBB-CD52178F0DEA/data/Containers/Bundle/Application/C9C66E4B-7DBA-409C-88FA-F0917B4D6681/kindact.app/lib/python3.7/site-packages/cryptography/hazmat/primitives/constant_time.py", line 11, in <module>
    from cryptography.hazmat.bindings._constant_time import lib
  File "<string>", line 43, in load_module
  File "/Users/hiencao/Desktop/2/kivy-ios/dist/root/python3/lib/python3.7/imp.py", line 342, in load_dynamic
ImportError: dynamic module does not define module export function (PyInit__constant_time)
2019-09-13 01:24:42.146234-0400 kindact[56329:305598] Application quit abnormally!
2019-09-13 01:24:42.165161-0400 kindact[56329:305598] Leaving

【问题讨论】:

  • 当您说“Firebase 需要 pycrypto”时。为什么会这样?看起来 firebase 模块只是执行一些标准 REST 请求的一种简单方法,如果它需要 pycrypto,您应该能够在不使用 firebase 模块的情况下使用它
  • 我使用 firebase 模块从 Firebase 实时数据库发布和获取数据。我在 pycharm 中执行了 main.py(从 firebase 导入 firebase),如果没有 pycrypto,它就无法运行。是这样的:```from firebase import firebase FBConn = firebase.FirebaseApplication('python-app-4857e.firebaseio.com', None) c = FBConn.get('/MyUsersEmail', None) print(c)
  • 如果 pycrypto 是问题所在,并且您正在使用它从 Firebase 实时数据库获取和发布数据,我想说完全停止使用 firebase 模块。您可以在没有 firebase 模块的情况下实现相同的功能,因此也无需 pycrypto :) 我有一些关于在没有 firebase 模块的情况下使用 firebase 的视频! youtube.com/watch?v=pgpoQZN9G6M
  • 正如您所建议的,我将 Firebase 替换为请求和 json。现在我可以在不使用 Firebase 和 pycrypto 的情况下从 Firebase 实时数据库发布和获取,这一直是个问题。谢谢。

标签: ios python-3.x firebase kivy pycrypto


【解决方案1】:

用 Requests 和 json 模块替换 Firebase 模块。

【讨论】:

  • 此外,如果您想在不阻塞主线程的情况下发出请求,可以使用 Kivy 包含的 UrlRequest 类。您可能会注意到使用 requests 包时,您的应用程序在发送/检索数据时会冻结。 UrlRequest 类为您异步执行此操作,并且非常易于使用!教程在这里:youtube.com/watch?v=nI9mjajX4TI
  • 啊,难怪当我发送数据时,progressspinner 总是冻结。 UrlRequest 在 pc 上完美运行。但是,在移动设备上,我需要执行以下操作才能使其正常工作: ca_file=cfi.where(), verify=True)
猜你喜欢
  • 1970-01-01
  • 2016-08-11
  • 2023-03-10
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
相关资源
最近更新 更多