pyinstaller [ErrNo 22]

时间:2013-09-23 20:45:34

标签: python pyinstaller

我正在尝试使用Pyinstaller来生成我的python代码的exe来轻松分发。每次我尝试运行pyinstaller.py时都会收到错误“[Errno 22]无效模式('rb')或文件名:''”

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

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: ''

任何人都有任何想法如何开始解决这个问题?

编辑:使用pyinstaller 2.1版

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

import pandas as pd

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

这给了我同样的错误。

6 个答案:

答案 0 :(得分:2)

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

首先,我的情况可能与OP略有不同,因为我在Windows 7上使用Anaconda Python发行版,并使用conda命令行来安装pywin32,然后使用请点击安装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>

A感谢Tompa here,他发现它解决了py2exe中的类似问题。

答案 1 :(得分:1)

重新安装了pywin32并且现在正在工作:S只是顺其自然

答案 2 :(得分:1)

花了一个星期的大部分时间来追踪这个错误。只是通过尝试编译导入numpy或pandas的脚本并打印“hello world”来获得此错误。

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

希望这有助于一些可怜的绝望灵魂。

答案 3 :(得分: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

答案 4 :(得分: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冻结此代码,但是发生了一些变化。希望能帮助到那里的人!

答案 5 :(得分:0)

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