2012-07-09 14 views
77

Tôi đang cố gắng truy cập một cổng nối tiếp với Python 2.6 trên Raspberry Pi của tôi đang chạy Debian. Kịch bản của tôi tên là serial.py cố gắng nhập pySerial:Python AttributeError: đối tượng 'module' không có thuộc tính 'Serial'

import serial 
ser = serial.Serial('/dev/ttyAMA0', 9600) 
ser.write("hello world!") 

Đối với một số lý do nó từ chối thiết lập kết nối nối tiếp với lỗi này:

AttributeError: 'module' object has no attribute 'Serial' 

Khi tôi cố gắng gõ cùng mã trong Python tương tác thông dịch viên vẫn không hoạt động.

Kỳ lạ, nó được sử dụng để hoạt động khoảng một vài giờ trước.

Điều gì có thể là vấn đề? Tôi đã cố sửa lỗi này một lúc, cài đặt lại pySerial, viết lại mã của tôi, kiểm tra lại cổng nối tiếp, v.v.

Cảm ơn bạn trước!

+4

Bạn đã thử 'serial serial serial' chưa? – mVChr

+0

Bạn đã gỡ cài đặt mô-đun hay thay đổi phiên bản python? – inspectorG4dget

+1

Traceback nói ...? –

Trả lời

64

Bạn đang nhập mô-đun, không phải lớp học. Vì vậy, bạn phải viết: from serial import serial

+3

đã hoạt động! cảm ơn. –

+3

Tôi đã gặp vấn đề tương tự nhiều lần trong khi nhập mô-đun. Tôi không hiểu tại sao nó hoạt động trong một số trường hợp (ví dụ khi bạn xem xét một số ví dụ trong [* serial * website] (http://pyserial.sourceforge.net/shortintro.html)) – VGO

+9

Tôi đã thử. không làm việc. Lỗi sẽ là "ImportError: không thể nhập tên nối tiếp" –

128

Tôi đang thêm giải pháp này cho những người mắc lỗi tương tự như tôi đã làm.

Trong hầu hết các trường hợp: đổi tên tệp dự án 'serial.py' và xóa serial.pyc nếu tồn tại, bạn có thể thực hiện 'nhập nối tiếp' đơn giản mà không có lỗi thuộc tính.

Sự cố xảy ra khi bạn nhập 'thứ gì đó' khi tên tệp python của bạn là 'something.py'.

+2

Yep .. Tôi đã đặt tên tệp thử nghiệm là "serial.py", vì vậy, chuỗi nhập đã tự nhập .. – PedroMorgan

+3

Tuyệt. Bạn đã giải quyết được vấn đề của tôi. Cảm ơn bạn rất nhiều –

+2

Wow, không thấy rằng sắp tới. Đã dành 45 phút để kéo tóc ra. – Ultratrunks

2

Nếu bạn là bất lực như tôi, cố gắng này:

Liệt kê tất cả Sub-module của "Serial" (hoặc bất kỳ gói bạn đang gặp rắc rối với) với phương pháp mô tả ở đây: List all the modules that are part of a python package

Trong tôi trường hợp, các vấn đề được giải quyết sau khi khác.

... trông giống như một lỗi với tôi ...

1

Lỗi này cũng có thể xảy ra nếu bạn có phụ thuộc vòng tròn. Kiểm tra nhập khẩu của bạn và chắc chắn rằng bạn không có bất kỳ chu kỳ.

1

Vấn đề này là beacouse proyect của bạn được đặt tên serial.py và thư viện nhập khẩu là tên nối tiếp quá, thay đổi tên và thats tất cả.

+0

Đó chính xác là vấn đề trong trường hợp của tôi. Không bao giờ chọn tên bằng thư viện nhập. – JohnnyFromBF

38

Tôi vô tình cài đặt 'nối tiếp' (sudo python -m pip install serial) thay vì 'pySerial' (sudo python -m pip install pyserial), dẫn đến cùng một lỗi.

Nếu các giải pháp đã đề cập trước đó không hoạt động đối với bạn, hãy kiểm tra kỹ xem bạn đã cài đặt đúng thư viện chưa.

+0

Và sửa chữa là để gỡ bỏ cài đặt cả hai, sau đó cài đặt lại pyserial. – jcaron