2010-12-12 39 views

Trả lời

10

Điều đáng nói rằng các gói có __file__ thuộc tính mà điểm đến __init__.py, họ cũng có __path__ mà chỉ vào thư mục gói. Vì vậy, bạn có thể sử dụng hasattr(module_name, '__path__') and module_name.__path__[0] or module_name.__file__.

Ví dụ (trong REPL):

import socket, SOAPpy # SOAPpy is a package 
socket.__file__ 
# .../python2.5/socket.pyc 
socket.__path__ 
# AttributeError: 'module' object has no attribute '__path__' 
SOAPpy.__file__ 
# .../2.5/site-packages/SOAPpy/__init__.pyc 
SOAPpy.__path__ 
# ['.../2.5/site-packages/SOAPpy'] 
+0

Bạn có bằng chứng? Tôi chỉ thử nó trên một gói của riêng tôi, '__file__' là có (' gói/__ init __. Pyc'), như nó phải được, nhìn thấy như là "gói" nhập khẩu chỉ là một mô-đun gọi là '__init__'. ('gói .__ path__ == ['gói']') –

+0

@Chris Đã cập nhật, cảm ơn bạn. – khachik

+0

còn các chức năng thì sao? có thể có vị trí cũng được xác định (tốt các tùy chọn khác có vẻ là chỉ cần kiểm tra đường dẫn của mô-đun mà từ đó nó đang được nhập khẩu và hy vọng rằng không có mangling ở giữa –

1
import module_name 
module_name.__file__ 
3

Thử: module_name.__file__.

Nếu bạn muốn 'kiểm tra' một đối tượng, sử dụng: inspect

0

Bạn có thể sử dụng tập tin thuộc tính mô-đun để tìm ra địa điểm.

import sys print sys.__file__

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