2011-09-19 35 views
7

Quiero usar un módulo, p. BeautifulSoup, en mi código Python, por lo que suelen añadir esto a la parte superior del archivo:Importar un módulo en Python solo si no existe

from BeautifulSoup import BeautifulSoup 

Sin embargo, cuando se distribuyo el módulo que estoy escribiendo, otros pueden no tener BeautifulSoup, así que voy a incluyo en mi estructura de directorios, así:

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

Ahora, mi archivo myscript.py modificado se verá así en la parte superior para hacer referencia al copia local de BeautifulSoup:

from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData 

Pero lo que si el dev eloper que usa mi biblioteca ya tiene instalado BeautifulSoup en su máquina? Deseo modificar myscript.py para que compruebe si BeautifulSoup ya está instalado y, de ser así, utilice el módulo estándar. De lo contrario, use el incluido.

Usando Pseudo-Python:

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

Es esto posible? ¿Si es así, cómo?

+1

Tomado de http://effbot.org/zone/import-confusion.htm: 'Cuando Python importa un módulo, primero comprueba el registro del módulo (sys.modules) a ver si el módulo ya está importado. Si ese es el caso, Python usa el objeto de módulo existente tal como está. – mwan

+0

Intente importarlo. Si no funciona, capture ImportError e importe desde su copia local. Denomine a su copia local algo más (myBeautifulSoup) para que no oculte el módulo instalado por el usuario. –

+0

@mwan: Ben no necesita saber si ya * importó *, necesita saber si * ya está en el sistema *. –

Respuesta

15

Por lo general, el siguiente patrón se utiliza para manejar esta situación en Python.

Primero cambie el nombre de su módulo BeautifulSoup por otra cosa, p. MyBeautifulSoup

continuación:

try: 
    import BeautifulSoup # Standard 
except ImportError: 
    import MyBeautifulSoup as BeautifulSoup # internal distribution 
Cuestiones relacionadas