Mô-đun Python có dấu gạch ngang hoặc dấu gạch ngang (-) trong tên của nó


92

Tôi có một mô-đun python hiện có với dấu gạch ngang trong tên của nó, foo-bar.py

Thay đổi tên mô-đun là điều tôi muốn tránh vì mô-đun được chia sẻ và tôi sẽ phải loại bỏ tất cả những nơi nó được sử dụng để trường hợp đặc biệt của tôi hoạt động.

Có cách nào để tải một mô-đun có tên chứa dấu '-' thường bị cấm không?

(Tôi hiểu rằng đây không phải là phương pháp hay nhất. Nhưng đối với tình huống này, tôi không muốn thiết kế lại và thử nghiệm một bộ ứng dụng lớn hơn nhiều. Ngoài ra, tôi không nghĩ rằng các chủ công ty của tôi sẽ chấp thuận việc tôi dành thời gian triển khai một sự thay đổi.)


5
Bạn không thể chỉ thực hiện tìm kiếm tệp trong IDE của mình và thay thế tất cả các tệp foo-barbằng foobarhoặc bất cứ thứ gì? Làm thế nào là khó đó?
agf


2
Câu trả lời này cụ thể: stackoverflow.com/questions/761519/…
BenH

agf Câu trả lời ngắn gọn: đó không phải là tất cả mã của tôi.
Bỏ qua Huffman,

S.Lott những người dùng khác là các ứng dụng thương mại. Đó là cách tôi biết nó có thể.
Bỏ qua Huffman

Câu trả lời:


98

Bạn có thể làm điều đó bằng cách sử dụng __import__(). Ví dụ:

foobar = __import__("foo-bar")

Nhưng bạn thực sự nên đổi tên mô-đun thay thế. Bằng cách đó, bạn có thể tránh nhầm lẫn nơi tên tệp của mô-đun khác với số nhận dạng được sử dụng trong chương trình.


4
Cảm ơn. Tôi hiểu rằng các quy ước nên được tuân theo bất cứ nơi nào thực tế. Tôi sẽ đưa ra vấn đề cụ thể này trong quá trình xem xét mã bộ phận.
Bỏ qua Huffman,

57

Tôi biết câu hỏi này đã được trả lời để làm hài lòng người hỏi, nhưng đây là một câu trả lời khác mà tôi tin rằng có một số giá trị ở trên khi sử dụng __import__().

import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()

Theo tài liệu:

"This provides an implementation of import which is portable to any 
Python interpreter. This also provides an implementation which is 
easier to comprehend than one implemented in a programming language 
other than Python."

Python 2.7 + chỉ


5
Tôi đang tìm kiếm cách thực hiện việc này và câu trả lời của bạn phù hợp với tình huống của tôi hơn câu trả lời cũ hơn. Sẽ luôn tốt nếu bạn thấy một câu trả lời khác biệt với câu đã có để thêm nó làm câu trả lời mới để những người ở vị trí như tôi có thể tìm thấy tất cả thông tin liên quan ở một nơi.
Davy M

0

Hãy thử sử dụng dấu gạch dưới thay vì dấu gạch nối.

nhập pymysql_utils

đã làm việc cho tôi mặc dù nhập pymysql-utils là tên của mô-đun được sử dụng bởi pip

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.