gpt4 book ai didi

python - 具有相关导入的 Pyinstaller

转载 作者:太空宇宙 更新时间:2023-11-03 13:44:45 25 4
gpt4 key购买 nike

我正在尝试使用 Pyinstaller 2.1 为 Windows 7 构建 Pyinstaller。该模块使用相对导入,因为该包通常在 Linux 中用作“常规”Python 包。有没有办法创建一个规范文件来处理这种类型的设置?理想情况下,我希望有一个 Python 包,我可以用它为 Windows 制作 Pyinstaller exe,并在 Linux/OS X 中有一个“常规”pip 可安装的 Python 包。

我正在考虑使用隐藏的导入或其他方法来实现这一点。

我已经尝试使用默认的 Pyinstaller 设置并将其指向我的“主”python 脚本。我从生成的 exe 中得到以下内容:

'尝试在非包中进行相对导入'

这是有道理的,因为我将 Pyinstaller 指向程序包中的 main.py 文件,而 Pyinstaller 并未获取我的整个程序包。这只是从命令行使用模块的起点。但是,您也可以导入它并在您自己的代码中使用它。

旁注:

原因是这个包需要 numpy 和 scipy。是的,我知道有很好的方法可以让这些在 Windows 中与 Anaconda 等一起工作。但是,由于遗留原因,我现在坚持使用 exe 设置。

最佳答案

我找不到让 Pyinstaller 执行此操作的方法。但是,我不认为这是 Pyinstaller 的错。这更多是我构建包的方式的问题。

我将一个脚本传递给 Pyinstaller,它是我的包的一部分。更好的方法是在包外提供一个简单的 Python 脚本,作为包的 cli 前端。

例如,考虑这样的包布局(假设文件使用相对导入):

repo_dir/
setup.py
README.md
package_a/
main.py
support_module.py
__init__.py

我之前的尝试是尝试通过将 main.py 传递给 Pyinstaller 来构建它。这导致了上述问题中提到的错误。

不过,我后来添加了一个 cli.py 脚本来执行如下操作:

from package_a.main import main
if __name__ == '__main__':
main()

现在,我可以将 cli.py 传递给 Pyinstaller,并且我的显式相对导入仅在包内部使用。所以,这一切都有效。这是一个示例目录布局,仅供引用:

repo_dir/
setup.py
cli.py
README.md
package_a/
main.py
support_module.py
__init__.py

关于python - 具有相关导入的 Pyinstaller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22457809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com