2011-09-19 24 views
7

Tôi muốn sử dụng một mô-đun, ví dụ: BeautifulSoup, trong mã Python của tôi, vì vậy tôi thường thêm video này vào phía trên cùng của file:Nhập một mô-đun bằng Python chỉ khi nó chưa tồn tại

from BeautifulSoup import BeautifulSoup 

Tuy nhiên, khi tôi phân phối mô-đun Tôi đang viết, những người khác có thể không có BeautifulSoup, vì vậy tôi sẽ chỉ bao gồm nó trong cấu trúc thư mục của tôi như vậy:

Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
d----   9/19/2011 5:45 PM   BeautifulSoup 
-a---   9/17/2011 8:06 PM  4212 myscript.py 

Bây giờ, sửa đổi tập tin myscript.py của tôi sẽ giống như thế này ở phía trên để tham khảo các bản sao cục bộ của BeautifulSoup:

from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData 

Nhưng nếu dev eloper người sử dụng thư viện của tôi đã có cài đặt BeautifulSoup trên máy của họ? Tôi muốn sửa đổi myscript.py để nó kiểm tra xem liệu BeautifulSoup đã được cài đặt chưa và nếu có, hãy sử dụng mô-đun chuẩn. Nếu không, hãy sử dụng sản phẩm được bao gồm.

Sử dụng Pseudo-python:

if fBeautifulSoupIsInstalled: 
    from BeautifulSoup import BeautifulSoup, CData 
else: 
    from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData 

Đây có phải là có thể? Nếu vậy, làm thế nào?

+1

Taken từ http://effbot.org/zone/import-confusion.htm: 'Khi Python nhập khẩu một mô-đun, nó kiểm tra đầu tiên module registry (sys.modules) để xem liệu mô-đun đã được nhập chưa. Nếu đúng như vậy, Python sử dụng đối tượng mô-đun hiện tại là is.' – mwan

+0

Hãy thử nhập nó. Nếu nó không hoạt động, hãy truy nhập ImportError và nhập từ bản sao cục bộ của bạn. Đặt tên cho bản sao cục bộ của bạn (myBeautifulSoup) để nó không ẩn mô-đun đã cài đặt của người dùng. –

+0

@mwan: Ben không cần biết nếu nó đã được * nhập *, anh ấy cần phải biết nếu nó đã có * trên hệ thống *. –

Trả lời

15

Thông thường mẫu sau được sử dụng để xử lý tình huống này bằng Python.

Đổi tên đầu tiên cho mô-đun BeautifulSoup của bạn, ví dụ: MyBeautifulSoup

Sau đó:

try: 
    import BeautifulSoup # Standard 
except ImportError: 
    import MyBeautifulSoup as BeautifulSoup # internal distribution 
Các vấn đề liên quan