7

我正在尝试使用 Pyinstaller 制作我的 python 代码的 exe 以轻松分发。每次我尝试运行 pyinstaller.py 时都会收到错误消息“[Errno 22] invalid mode ('rb') or filename: ''”

我在这个问题上看到了其他一些帖子,说这个问题通常是由文件路径中用于读取数据的硬编码引起的,但是我所有的文件路径都是使用变量完成的,并询问用户文件的位置。

File "pyinstaller.py", line 18, in <module>
run()
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\main.py", line 88, in run
run_build(opts, spec_file, pyi_config)
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\main.py", line 46, in run_build
PyInstaller.build.main(pyi_config, spec_file, **opts.__dict__)
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\build.py", line 1924, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\build.py", line 1873, in build
execfile(spec)
File "\PyInstaller-2.1\PyInstaller-2.1\guimain\guimain.spec", line 17, in <module>
console=True )
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\build.py", line 1170, in __init__
strip_binaries=self.strip, upx_binaries=self.upx,
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\build.py", line 1008, in __init__
self.__postinit__()
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\build.py", line 309, in __postinit__
self.assemble()
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\build.py", line 1050, in assemble
dist_nm=inm)
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\build.py", line 842, in checkCache
digest = cacheDigest(fnm)
File "\PyInstaller-2.1\PyInstaller-2.1\PyInstaller\build.py", line 796, in cacheDigest
data = open(fnm, "rb").read()
IOError: [Errno 22] invalid mode ('rb') or filename: ''

任何人有任何想法我可以开始解决这个问题吗?

编辑:使用 2.1 版的 pyinstaller

编辑:所以我尝试通过创建这个来测试我的代码:

import pandas as pd

if __name__ == '__main__':
    maindata = pd.DataFrame
    print maindata

这给了我同样的错误。

4

6 回答 6

2

我有同样的问题,但发现这些其他解决方案并没有解决问题。但是,我确实找到了如下解决方法:

首先,我的情况可能与 OP 有点不同,因为我在 Windows 7 上使用 Anaconda Python 发行版,并且也使用conda命令行安装pywin32,然后使用 pip 安装pyinstaller

我在 pyinstaller 输出日志中发现同样的 IOError 之前有这个早期的错误消息:

ImportError: No system module 'pywintypes' (pywintypes27.dll)  

修复这两个错误的解决方案是复制 DLL 文件:

pywintypes27.dll
pythoncom27.dll 

坐在: C:\<anaconda-dir>\Lib\site-packages\win32

C:\<anaconda-dir>\Lib\site-packages\win32\lib

<anaconda-dir>您的 Anaconda 根目录在哪里:

C:\Users\<username>\AppData\Local\Continuum\Anaconda\默认,

或您设置的环境,例如

C:\Users\<username>\AppData\Local\Continuum\Anaconda\envs\<environment-name>

多亏了 Tompa here,A 发现了这个答案,他发现它解决了 py2exe 中的类似问题。

于 2015-06-30T17:11:47.190 回答
1

很好地重新安装了pywin32,现在可以工作了:S就可以了

于 2013-09-26T18:51:53.657 回答
1

刚刚花了一周的大部分时间来跟踪这个错误。只是通过尝试编译导入 numpy 或 pandas 并打印“hello world”的脚本而收到此错误。

最终通过以管理员身份运行命令提示符来修复它......是的。

希望这可以帮助一些可怜的绝望的灵魂。

于 2015-05-22T04:25:52.833 回答
1

重新安装pywin32,现在可以工作了。

sourceforge.net/projects/pywin32/files/pywin32/

找到最新的

http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/

我的是赢 64 所以

获取http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/pywin32-218.win-amd64-py2.7.exe/download

于 2015-08-11T02:50:17.493 回答
0

我知道这是一个旧线程,但我自己解决了一个非常类似的问题,并认为我会发布这个以防它对其他人有帮助。

我得到

OSError: [Errno 22] 无效参数

没有任何其他特殊性来帮助我调试。

在我的代码中有一个文件名,代码将在其中将某些内容保存到映射的网络驱动器“S”。在我的本地机器上,我实际上没有“S”驱动器。出于测试目的,我使用异常来捕获和重定向。无论如何,pyinstaller 似乎对代码引用不存在的“S”驱动器这一事实感到窒息。不确定它是否认为它需要导入一个模块,或者只是因为找不到“S”而感到恼火。无论如何,这个修复解决了它:

#ORIG CODE THAT FAILED
#filename = 'S:\\MyFile\\Saves\\HELLO_WORLD.TXT'
first = 'S:'
rest = '\\MyFile\\Saves\\HELLO_WORLD.TXT''
filename = first + rest

令人沮丧的是,在以前的某个时候,我能够使用 pyinstaller 冻结此代码,但有些事情发生了变化。希望能帮助那里的人!

于 2020-01-12T14:00:30.157 回答
0

尝试更改您的文件名我可能通过这样做解决了这个问题

于 2020-09-08T20:16:04.460 回答