2011-09-19 25 views
7

モジュールを使用したいと思います。私のPythonコードでBeautifulSoup、ので、私は通常、ファイルの先頭に以下を追加:私は私が書いているモジュールを配布する際にモジュールがPythonでインポートされていない場合にのみインポートします。

from BeautifulSoup import BeautifulSoup 

はしかし、他の人がBeautifulSoupを持っていないかもしれないので、私はちょうど含まれますそれそのような私のディレクトリ構造に:

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

、私の修正myscript.pyファイルがBeautifulSoupのローカルコピーを参照するために先頭に次のようになります。

from BeautifulSoup.BeautifulSoup import BeautifulSoup, CData 

しかし、どのような場合DEV私のライブラリーを使用しているEloperは、すでに自分のマシンにBeautifulSoupをインストールしていますか? BeautifulSoupが既にインストールされているかどうかを確認するようにmyscript.pyを修正したい場合は、標準モジュールを使用します。それ以外の場合は、付属のものを使用してください。

使用して擬似パイソン:

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

これは可能ですか?もしそうなら、どうですか?

+1

を撮影し:そしてMyBeautifulSoup

'Pythonはモジュールをインポートし、それを最初にチェックモジュールレジストリ(sys.modules)にモジュールがすでにインポートされているかどうかを確認してください。その場合、Pythonは既存のモジュールオブジェクトをそのまま使用します。 ' – mwan

+0

それをインポートしてみてください。動作しない場合は、ImportErrorをキャッチし、ローカルコピーからインポートしてください。あなたのローカルコピーに別の名前(myBeautifulSoup)を付けて、ユーザがインストールしたモジュールを隠さないようにします。 –

+0

@mwan:Benは既にインポート済みかどうかを知る必要はありません。ベンは既にシステムに*あるかどうかを知る必要があります。 –

答えて

15

通常、次のパターンは、この状況をPythonで処理するために使用されます。

まず、BeautifulSoupモジュールの名前を変更します。 http://effbot.org/zone/import-confusion.htmから

try: 
    import BeautifulSoup # Standard 
except ImportError: 
    import MyBeautifulSoup as BeautifulSoup # internal distribution 
関連する問題