<p>所以我昨天也有类似的问题。我有一个变通方法,允许程序运行,但不能作为一个文件运行。不幸的是,这也会使文件夹变大,因为它将包含所有虚拟环境包。我希望其他人能给你一个更好的答案</p>
<p>首先,调试时不要使用--windowed。忽略--窗口化,然后使用命令行运行.exe。这将为您显示错误。在这种情况下:</p>
<pre><code> Traceback (most recent call last):
File "main.py", line 6, in <module>
File "PyInstaller\loader\pyimod03_importers.py", line 531, in exec_module
File "docx2pdf\__init__.py", line 13, in <module>
File "importlib\metadata.py", line 551, in version
File "importlib\metadata.py", line 524, in distribution
File "importlib\metadata.py", line 187, in from_name
importlib.metadata.PackageNotFoundError: docx2pdf
[6860] Failed to execute script main
</code></pre>
<p>我们看到一个导入错误,因为Pyinstaller不考虑二级导入。在这种情况下,我相信docx2pdf有自己的导入列表。看看钩子和导入错误,有很多解决方案——但是我个人无法用我读到的解决方案获得结果</p>
<p>因此,我为您提供的替代“bandaid”解决方案要求您使用.spec文件。
运行<code>Pyinstaller --noconfirm main.py</code>
接下来,您需要编辑在工作目录中生成的main.spec文件。
将site packages文件夹添加到数据中,使其如下所示:</p>
<pre><code>datas=[('C:\\PathToProjectFolder\\venv\\Lib\\site-packages', '.')]
</code></pre>
<p>并将.spec文件中的控制台行编辑为:<code>console=False</code>(单击.exe时隐藏控制台)</p>
<p>使用更新的.spec文件,我们可以再次运行Pyinstaller,这次输入:</p>
<pre><code>pyinstaller --noconfirm main.spec
</code></pre>
<p>请注意main.spec,而不是main.py</p>
<p>dist文件夹中的.exe现在应该运行。祝你好运,找到一个更好的解决方案,不会使你的文件夹过大</p>