2014-07-10 67 views
0

我开发了一个python脚本,用于与数字泵进行串行通信。我现在需要制作一个可执行文件。然而,即使它与Python和py2exe运行时,它完美的作品以及是否正确产生的.exe当我运行出现以下错误可执行文件:可执行的包含serial_for_url的脚本

File: pump_model.pyc in line 96 in connect_new 
File: serial\__init__.pyc in line 71 in serial_for_url 
ValueError: invalid URL protocol 'loop' not known 

相关一张我的代码如下: #新串行连接 高清connect_new(个体经营,port_name中指): “”“功能配置新的串行连接”“”

try: 
     self.ser = serial.Serial(port = port_name,\ 
       baudrate = 9600,\ 
       parity = 'N',\ 
       stopbits = 1,\ 
       bytesize = 8,\ 
       timeout = self.timeout_time) 
    except serial.SerialException: 
     self.ser = serial.serial_for_url('loop://',\ 
       timeout = self.timeout_time) # This line BLOWS! 
    except: 
     print sys.exc_info()[0] 

    finally: 
     self.initialize_pump() 

我要指出的是,应用程序是写在OSX和Windows上进行了测试与Canopy Python Distribution。

回答

0

找到了!

似乎由于某种原因,'.exe:'生成后无法识别'loop://'参数。

我想通了,通过学习pyserial/初始化的.py脚本发出命令serial.serial_for_url当( '循环://')基本上你拨打: sys.modules中[ 'serial.urlhandler.protocol_loop' ] .Serial(“loop://”)

因此,您必须先导入serial.urlhandler.protocol_loop ,然后发出该命令代替发生故障的位置。 所以你现在可以输入:

__import__('serial.urlhandler.protocol_loop') 
sys.modules[‘serial.urlhandler.protocol_loop’].Serial("loop://") 

这个小解决方法它工作得很好了。

+0

很高兴你发现它!请将这个(你自己的答案)标记为已接受,这样就可以清楚地看出问题已经得到解答。 (SO标准礼仪) –

1

我有完全相同的问题,“插座://”,而不是“循环://”

我是不是能够得到接受的答案但是工作下面似乎成功:

1)添加违规urlhandler的明确进口*模块

import serial 

# explicit import for py2exe - to fix "socket://" url issue 
import serial.urlhandler.protocol_socket 

# explicit import for py2exe - to fix "loop://" url issue (OP's particular prob) 
import serial.urlhandler.protocol_loop 

# use serial_for_url in normal manner 
self._serial = serial.serial_for_url('socket://192.168.1.99:12000') 

2)产生py2exe安装脚本(见https://pypi.python.org/pypi/py2exe/) - 我已经安装了py2exe到的virtualenv:

path\to\env\Scripts\python.exe -m py2exe myscript.py -W mysetup.py 

3)编辑mysetup.py包括选项

zipfile="library.zip" # default generated value is None 

(见http://www.py2exe.org/index.cgi/ListOfOptions

3)构建它:

path\to\env\Scripts\python.exe mysetup.py py2exe 

4)运行

dist\myscript.exe