简体   繁体   中英

'module' object has no attribute 'to_bytes' Python

Please advise how I can cx-freeze my python program which uses serial :

    import serial    
    import serial.tools.list_ports;

    print serial.tools.list_ports()

Here's my setup.py

import sys
from cx_Freeze import setup, Executable

    setup(
        name = "My test program",
        version = "3.1",
        description = "My test",
        executables = [Executable("pystest.py", base = "Win32GUI")])

After I build using cx_freeze, this is my error :

---------------------------
cx_Freeze: Python error in main script
---------------------------
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
    exec(code, m.__dict__)
  File "pystest.py", line 1, in <module>
  File "C:\Python27\lib\site-packages\serial\tools\list_ports.py", line 27, in <module>
    from serial.tools.list_ports_windows import *
  File "C:\Python27\lib\site-packages\serial\tools\list_ports_windows.py", line 127, in <module>
    Ports = serial.to_bytes([80, 111, 114, 116, 115]) # "Ports"
AttributeError: 'module' object has no attribute 'to_bytes'

---------------------------
OK   
---------------------------

I'm not sure why I see this error. Any advise appreciated.

Here's a screenshot for easy reading :

在此处输入图片说明

Thanks.

import sys
from cx_Freeze import setup, Executable
path = ["pystest"]+sys.path

build_exe_options = {"packages": ["os","serial"], "excludes": ["tkinter"],"path":path}
#add more package what are using for your app?

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "My test program",
        version = "3.1",
        description = "My test",
        options = {"build_exe": build_exe_options},
        executables = [Executable("pystest.py", base=base)])

I actually ended up doing this :

  1. Modfying the file list_ports_windows.py inside C:\\Python27\\Lib\\site-packages\\serial\\tools and changed serial to serialutil like this :
 Ports = serialutil.to_bytes([80, 111, 114, 116, 115]) # "Ports" PortName = serialutil.to_bytes([80, 111, 114, 116, 78, 97, 109, 101]) # "PortName" 
  1. Then Added from serial import serialutil to the imports

Not sure if this is the right or wrong way but then it worked.

Thanks.

Ports = serial.to_bytes([80, 111, 114, 116, 115]) # "Ports" no attribute 'to_bytes' two step:

1、pip install pyserial==3.4

2、pip install pyserial==2.7

i don't know the reason, but it worked

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM