2009-12-14 24 views
13

Làm cách nào để có thể truy cập mô-đun thư viện chuẩn (nói toán) khi tệp prog.py được đặt trong cùng thư mục với mô-đun cục bộ có cùng tên (math.py)?Cách truy cập mô-đun thư viện chuẩn trong Python khi có mô-đun cục bộ có cùng tên?

Tôi hỏi câu hỏi này vì tôi muốn tạo ra một gói uncertainties rằng người ta có thể sử dụng như là

import uncertainties 
from uncertainties.math import * 

Như vậy, có một mô-đun toán địa phương bên trong thư mục bất trắc. Vấn đề là tôi muốn truy cập vào mô-đun toán học thư viện chuẩn từ những điều không chắc chắn/__ init__.py.

Tôi không muốn đổi tên các điểm không chắc chắn.math vì mô-đun này được thiết kế để thay thế các hàm từ mô-đun toán học (với các số tương đương xử lý sự không chắc chắn về số).

PS: câu hỏi này liên quan đến mô-đun tôi đã viết để thực hiện calculations with uncertainties trong khi tính đến mối tương quan giữa các biến.

Trả lời

19

Bạn đang tìm kiếm hàng nhập tuyệt đối/tương đối từ PEP 328, có sẵn với 2.5 and upward.

Trong Python 2.5, bạn có thể chuyển đổi hành vi của nhập khẩu thành nhập khẩu tuyệt đối bằng cách sử dụng chỉ thị nhập __future__ absolute_import. Hành vi nhập tuyệt đối này sẽ trở thành mặc định trong phiên bản tương lai (có thể là Python 2.7). Khi nhập khẩu tuyệt đối là mặc định, toán nhập sẽ luôn tìm phiên bản của thư viện chuẩn. Chúng tôi đề xuất rằng người dùng nên bắt đầu sử dụng nhập khẩu tuyệt đối càng nhiều càng tốt, vì vậy bạn nên bắt đầu viết từ chuỗi nhập pkg trong mã của mình.

nhập khẩu tương đối vẫn có thể bằng cách thêm một khoảng thời gian hàng đầu để vào tên module khi sử dụng hình thức từ ... nhập khẩu:

from __future__ import absolute_import 
# Import uncertainties.math 
from . import math as local_math 
import math as sys_math 
+0

Được xác nhận là câu trả lời: câu trả lời này là câu hỏi (mặc dù S. Lott đã thuyết phục tôi rằng tôi nên theo một tuyến đường khác :). – EOL

+0

Vâng, tôi cũng không sử dụng toán học làm tên mô-đun;) – mbarkhau

+4

"Có lẽ trong 2,7" - Điều đó thực sự chưa bao giờ xảy ra. 2.7 người dùng cần dòng absolute_import nếu họ muốn hành vi này. – Joe

5

Tại sao bạn không thể đổi tên mô-đun cục bộ của mình một lần nữa?

Rõ ràng, đó không phải là thay thế "tổng cộng", nếu bạn vẫn cần những thứ từ uncertainties được cài đặt.

Vì đó là phần thay thế một phần, bạn không nên đặt cùng tên.

Điều gì khác biệt? Những gì giống nhau? Chọn một tên tốt hơn dựa trên đó.

+0

+1: cấp, nó không phải là một sự thay thế hoàn toàn. Tôi sẽ xem xét đổi tên mô-đun không chắc chắn (tương lai) trong tương lai. PS: Mô-đun toán chuẩn được sử dụng trong unsainties.py vì không chắc chắn được điều khiển thông qua các hàm toán học không biết về độ không chắc chắn (mô-đun không chắc chắn.math có thể được sử dụng, với chi phí tốc độ vì nó tổng quát hơn mô-đun toán chuẩn) – EOL

+0

@EOL: Bạn không thể đơn giản thay thế thứ gì đó cơ bản thành "toán học" bằng một mô-đun khác có cùng tên. Giai đoạn. Nó gây nhầm lẫn cho người dùng. Nhiều như bạn muốn cung cấp một thay thế "pin-to-pin" trơn tru, không làm điều đó. Làm ơn đừng. Gọi nó là "umath" hoặc cái gì đó ** rõ ràng ** nói rằng nó không phải là 'math'. –

+1

@S. Lott: Ừ, tôi đã nghĩ rằng 'sự không chắc chắn nhập khẩu' sẽ rõ ràng, như là 'từ sự không chắc chắn nhập toán học', nhưng tôi đã thất bại khi thấy rằng 'math.sin()' sẽ gây nhầm lẫn. Tôi sẽ christen nó umath trong danh dự của bạn. :) – EOL

Các vấn đề liên quan