Hướng dẫn cannot import name from python - không thể nhập tên từ python
Tôi có một số mã lan truyền trên nhiều tệp cố gắng 9 từ nhau, như sau: Show main.py:
entity.py:
physics.py:
Sau đó tôi chạy từ 0 và tôi gặp lỗi sau:
Tôi cho rằng lỗi là do nhập 1 hai lần - một lần trong 0 và sau đó trong 3 - nhưng làm thế nào tôi có thể giải quyết vấn đề?Xem thêm những gì xảy ra khi sử dụng nhập khẩu lẫn nhau hoặc tròn (tuần hoàn) trong Python? Đối với một tổng quan chung về những gì được cho phép và nguyên nhân gây ra một vấn đề nhập khẩu thông tư WRT. Xem tại sao nhập khẩu thông tư dường như hoạt động xa hơn trong ngăn xếp cuộc gọi nhưng sau đó nâng một nhà nhập khẩu xuống xa hơn? Để biết chi tiết kỹ thuật về lý do và cách xảy ra vấn đề.why and how the problem occurs.
Karl Knechtel 59.4K10 Huy hiệu vàng86 Huy hiệu bạc132 Huy hiệu đồng10 gold badges86 silver badges132 bronze badges hỏi ngày 12 tháng 2 năm 2012 lúc 20:49Feb 12, 2012 at 20:49
6 Bạn có nhập khẩu phụ thuộc tròn. 3 được nhập từ 1 trước khi lớp 6 được xác định và 7 cố gắng nhập 1 đã khởi tạo. Hủy bỏ sự phụ thuộc vào 7 khỏi mô -đun 1.
Arkady 13,5K7 Huy hiệu vàng39 Huy hiệu bạc46 Huy hiệu đồng7 gold badges39 silver badges46 bronze badges Đã trả lời ngày 12 tháng 2 năm 2012 lúc 21:01Feb 12, 2012 at 21:01
Teemu Ikonentemu IkonenTeemu Ikonen 11.7K4 Huy hiệu vàng22 Huy hiệu bạc35 Huy hiệu Đồng4 gold badges22 silver badges35 bronze badges 1 Mặc dù bạn chắc chắn nên tránh các phụ thuộc tròn, bạn có thể trì hoãn nhập khẩu trong Python. Ví dụ:
Điều này (ít nhất là trong một số trường hợp) sẽ phá vỡ lỗi. Đã trả lời ngày 28 tháng 8 năm 2013 lúc 11:40Aug 28, 2013 at 11:40
Bharlingbharlingbharling 2.7501 Huy hiệu vàng17 Huy hiệu bạc25 Huy hiệu đồng1 gold badge17 silver badges25 bronze badges 2 Đây là một phụ thuộc tròn. Nó có thể được giải quyết mà không có bất kỳ sửa đổi cấu trúc cho mã. Vấn đề xảy ra vì trong 1 bạn yêu cầu 1 được cung cấp để sử dụng ngay lập tức và ngược lại. Lý do cho vấn đề này là bạn yêu cầu truy cập nội dung của mô -đun trước khi nó sẵn sàng - bằng cách sử dụng 3. Điều này về cơ bản giống như
Python có thể phát hiện các phụ thuộc tròn và ngăn chặn vòng lặp nhập khẩu vô hạn. Về cơ bản, tất cả những gì xảy ra là một trình giữ chỗ trống được tạo cho mô -đun (nghĩa là nó không có nội dung). Khi các mô -đun phụ thuộc tròn được biên dịch, nó sẽ cập nhật mô -đun đã nhập. Đây là hoạt động như thế này.
Để Python có thể làm việc với các phụ thuộc tròn, bạn phải chỉ sử dụng kiểu 4.
Vì bạn không còn đề cập đến nội dung của mô -đun ở cấp cao nhất, Python có thể biên dịch mô -đun mà không thực sự phải truy cập vào nội dung của phụ thuộc tròn. Theo cấp cao nhất, tôi có nghĩa là các dòng sẽ được thực thi trong quá trình biên dịch trái ngược với nội dung của các hàm (ví dụ: 5). Các biến tĩnh hoặc lớp truy cập vào nội dung mô -đun cũng sẽ gây ra vấn đề.Đã trả lời ngày 23 tháng 5 năm 2014 lúc 19:11May 23, 2014 at 19:11
DunesdunesDunes Phim huy hiệu vàng 35,9k77 gold badges78 silver badges93 bronze badges 0 Trong trường hợp của tôi, tôi đã làm việc trong một máy tính xách tay Jupyter và điều này đã xảy ra do việc nhập đã được lưu trữ từ khi tôi xác định lớp/chức năng trong tệp làm việc của tôi. Tôi đã khởi động lại hạt nhân Jupyter của mình và lỗi đã biến mất. Đã trả lời ngày 23 tháng 4 năm 2020 lúc 1:04Apr 23, 2020 at 1:04
Harry mharry mHarry M 1.7083 huy hiệu vàng19 Huy hiệu bạc34 Huy hiệu đồng3 gold badges19 silver badges34 bronze badges 0
Nếu bạn không muốn thay đổi logic, bạn có thể đặt một số câu lệnh nhập khiến nhập khẩu vào vị trí khác của tệp, ví dụ như kết thúc. a.py
b.py
Nhưng nếu chúng ta thay đổi vị trí từ Test.b Nhập B2 ở mức như dưới đây: a.py 0Và chúng ta có thể có được những gì chúng ta muốn: 1Đã trả lời ngày 20 tháng 11 năm 2017 lúc 13:59Nov 20, 2017 at 13:59
g10guangg10guangg10guang 4.1093 Huy hiệu vàng27 Huy hiệu bạc22 Huy hiệu Đồng3 gold badges27 silver badges22 bronze badges 0 Đây là một phụ thuộc tròn. Chúng tôi có thể giải quyết vấn đề này bằng cách sử dụng mô -đun nhập khẩu hoặc lớp hoặc chức năng khi chúng tôi cần. Nếu chúng ta sử dụng phương pháp này, chúng ta có thể khắc phục sự phụ thuộc trònimport module or class or function where we needed. if we use this approach, we can fix circular dependency A.py 2B.py 3Đã trả lời ngày 3 tháng 5 năm 2019 lúc 9:14May 3, 2019 at 9:14
Tôi cũng đã nhận được lỗi này, vì một lý do khác ... 4Kịch bản chính có kết thúc dòng Windows. 7 có kết thúc dòng Unix. Thay đổi chúng để được cùng một vấn đề. Họ cũng cần phải có cùng một mã hóa ký tự.Đã trả lời ngày 7 tháng 4 năm 2017 lúc 11:52Apr 7, 2017 at 11:52
Marengazmarengazmarengaz 1.53916 huy hiệu bạc28 Huy hiệu đồng16 silver badges28 bronze badges Như đã đề cập, điều này được gây ra bởi một sự phụ thuộc tròn. Điều chưa được đề cập là khi bạn sử dụng mô -đun gõ Python và bạn chỉ nhập một lớp để được sử dụng để chú thích các loại, bạn có thể sử dụng các tài liệu tham khảo chuyển tiếp:circular dependency. What has not been mentioned is that when you're using Python typing module and you import a class only to be used to annotate Types, you can use Forward references:
và loại bỏ sự phụ thuộc (nhập), ví dụ: thay vì 5do: 6(Lưu ý câu lệnh 9 đã xóa)Đã trả lời ngày 10 tháng 1 năm 2020 lúc 18:19Jan 10, 2020 at 18:19
1 Vấn đề rất rõ ràng: sự phụ thuộc tròn giữa các tên trong các mô -đun 1 và 7.circular dependency between names in 1 and 7 modules.Bất kể nhập toàn bộ mô -đun hay chỉ là một lớp, các tên phải được tải. Xem ví dụ này: 7 8Điều này sẽ được biên dịch thành: 9Với một thay đổi nhỏ, chúng ta có thể giải quyết điều này: 0 1Điều này sẽ được biên dịch thành: 2Với một thay đổi nhỏ, chúng ta có thể giải quyết điều này:Apr 13, 2020 at 16:29
Đã trả lời ngày 13 tháng 4 năm 2020 lúc 16:29DuniC Dunicdunic2 silver badges6 bronze badges 0 2232 Huy hiệu bạc6 Huy hiệu đồngrename your working python script Hãy thử giải pháp này: Đổi tên tập lệnh Python làm việc của bạn Example:
Trong tập lệnh đó, bạn có: 2 trong đó 3 được cho là một mô -đun được cài đặt riêngĐiều này sẽ thất bại với 4 vì 2 điều đề cập đến 3Vì vậy, chỉ cần đổi tên tập lệnh Python làm việc của bạn trong 1.Oct 17, 2018 at 23:56
Đã trả lời ngày 17 tháng 10 năm 2018 lúc 23:56Paul Paulpaul29 silver badges28 bronze badges 0 3.54229 Huy hiệu bạc28 Huy hiệu đồng 3Nếu bạn đang nhập 6 từ 7 và sử dụng điều này:cannot be imported to 7 because 0 does not equal 1! Các biến dưới đây trong 6 không thể được nhập vào 7 vì 0 không bằng 1! 4Nếu bạn muốn nhập một cái gì đó từ 6 vào 7, bạn cần sử dụng nó trong 6:Trong trường hợp nghi ngờ, hãy đưa ra tuyên bố 5 để xác định xem 6 cóDec 20, 2019 at 23:31
Đã trả lời ngày 20 tháng 12 năm 2019 lúc 23:31Nicolas Gervais Nicolas Gervaisnicolas Gervais11 gold badges105 silver badges128 bronze badges Phù bằng vàng 31K11
Bước nhập khẩu: Không thể nhập tên B IrtUterror: Không thể nhập tên C (một số mô-đun không tồn tại hoặc một số lỗi khác)17 gold badges43 silver badges53 bronze badges TomNov 12, 2019 at 11:39
16K17 Huy hiệu vàng43 Huy hiệu bạc53 Huy hiệu đồngEvalds Urtans Đã trả lời ngày 12 tháng 11 năm 2019 lúc 11:391 gold badge40 silver badges30 bronze badges Evalds Urtansevalds Urtans 6.2061 Huy hiệu vàng40 Huy hiệu bạc 30 Huy hiệu Đồng Cũng không liên quan trực tiếp đến OP, nhưng không khởi động lại bảng điều khiển Pycharm Python, sau khi thêm một đối tượng mới vào mô -đun, cũng là một cách tuyệt vời để có được một 7 rất khó hiểuNov 29, 2019 at 22:14
Phần khó hiểu là Pycharm sẽ tự động hoàn thành việc nhập trong bảng điều khiển, nhưng việc nhập sau đó không thành công.djvg Đã trả lời ngày 29 tháng 11 năm 2019 lúc 22:144 gold badges58 silver badges91 bronze badges DJVGDJVG 9.3144 Huy hiệu vàng58 Huy hiệu bạc91 Huy hiệu Đồng
Tôi đã nhận được lỗi này Bước nhập khẩu: Không thể nhập tên Insplict_wait Bởi vì biến của tôi thực sự là 8.Oct 19, 2018 at 17:51
Khi tôi thay đổi nhập để sử dụng đúng tên, tôi không còn gặp lỗi nữaNick Brady Đã trả lời ngày 19 tháng 10 năm 2018 lúc 17:511 gold badge44 silver badges68 bronze badges 0 Nick Bradynick Brady 5.6571 Huy hiệu vàng44 Huy hiệu bạc68 Huy hiệu đồngOct 14, 2019 at 21:01
Không dành riêng cho người hỏi này, nhưng lỗi tương tự này sẽ hiển thị nếu tên lớp trong nhập của bạn không khớp với định nghĩa trong tệp bạn đang nhập từ.Bennett Đã trả lời ngày 14 tháng 10 năm 2019 lúc 21:012 gold badges6 silver badges16 bronze badges Bennettbennett 83172 Huy hiệu vàng6 Huy hiệu bạc16 Huy hiệu đồng
Trong trường hợp của tôi, chỉ cần bỏ lỡ tên tệp: trong đó CottectailSep 25, 2020 at 7:02
sailfish009sailfish009sailfish009 4.43218 Huy hiệu vàng19 Huy hiệu bạc37 Huy hiệu đồng1 gold badge23 silver badges30 bronze badges Đã trả lời ngày 25 tháng 9 năm 2020 lúc 7:02 2.3501 Huy hiệu vàng23 Huy hiệu bạc 30 Huy hiệu Đồng
Trong trường hợp của tôi, chỉ cần bỏ lỡ tên tệp: trong đó CottectailSep 6 at 4:19
4.43218 Huy hiệu vàng19 Huy hiệu bạc37 Huy hiệu đồngWade Wang Đã trả lời ngày 25 tháng 9 năm 2020 lúc 7:024 silver badges11 bronze badges Làm cách nào để sửa lỗi nhập Python?Python's Irtunterror (ModulenotFounderRor) chỉ ra rằng bạn đã cố gắng nhập một mô -đun mà Python không tìm thấy.Nó thường có thể được loại bỏ bằng cách thêm một tệp có tên __init__.py vào thư mục và sau đó thêm thư mục này vào $ pythonpath.adding a file named __init__.py to the directory and then adding this directory to $PYTHONPATH .
Tại sao tôi không thể nhập chức năng từ một tệp python?Python "Bộ nhập khẩu: Không thể nhập tên" thường xảy ra khi chúng tôi có nhập vòng tròn (nhập thành viên giữa cùng một tệp).Để giải quyết lỗi, di chuyển các chức năng hoặc lớp sang tệp thứ ba và nhập chúng từ vị trí trung tâm trong các tệp khác.move the functions or classes to a third file and import them from a central location in other files.
__ init __ py làm gì trong python?Các tệp __init__.py được yêu cầu để làm cho các thư mục xử lý Python chứa tệp dưới dạng các gói.Điều này ngăn các thư mục có tên chung, chẳng hạn như chuỗi, vô tình ẩn các mô -đun hợp lệ xảy ra sau đó trên đường dẫn tìm kiếm mô -đun.make Python treat directories containing the file as packages. This prevents directories with a common name, such as string , unintentionally hiding valid modules that occur later on the module search path. |