2009-02-26 15 views
5

ファイルの名前を変更した場合のみ可能ですか?または、そのファイルの名前を定義するためにファイルに__module__という変数がありますか?Pythonモジュール名を変更するには?

+0

ファイルの名前を変更する際の問題点は何ですか?なぜ仕事の名前を変更しませんか? –

+0

実際には、それはちょうど怠惰でした...私は、Launchpadでファイルを削除して再度追加したくありませんでした。 – Rodrigo

答えて

8

はい、ファイルの名前を変更する必要があります。あなたのシステムからoldname.pycoldname.pyoのコンパイル済みファイル(もしあれば)を削除することをお勧めします。そうしないと、モジュールは古い名前でもインポート可能になります。

0

すべてのクラスには__module__というプロパティがありますが、これを変更してもクラスの名前空間は変更されません。

可能であれば、setattrを使用してメソッドやクラスを目的のモジュールに挿入する必要がありますが、コードを将来のピアにとって非常に混乱させる危険性があります。

ファイルの名前を変更することをお勧めします。

0

この__module__の変数はどこですか。元のスクリプトはインポートするものを知っていますか?モジュールはファイル名で認識され、変数sys.pathで定義されたパスを調べます。

ファイルの名前を変更してから、oldname.pycを削除して、すべてが正しく機能することを確認してください。

17

あなたが本当に文で「インポートNEWNAME」で「oldname.py」ファイルをインポートしたい場合は、それを可能にするトリックがあります:sys.modulesに注入、その後、どこか古い名前のモジュールをインポート新しい名前で後続のインポートステートメントでも、新しい名前でそのステートメントが検索されます。コードサンプル:

# this is in file 'oldname.py' 
...module code... 

使用法:今すぐ

# inject the 'oldname' module with a new name 
import oldname 
import sys 
sys.modules['newname'] = oldname 

することができますどこでもimport newnameであなたのモジュール。

+0

私はそれをしたいと思う状況を考えることができませんが、それはあなたができることを涼しいです:) – technomalogical

+1

一つの状況:あなたがPython 2.6と2.7の両方との互換性を望むが、いくつかの新しい2.7ユニットテスト機能。このトリックでは、新しい機能を使用している間にコードを 'import unittest 'を使用するだけで済むので、Pythonのバージョンを切り替えるたびにimportステートメントを変更する必要はありませんでした。 – Tobi

11

あなたはとして使用することにより、インポート時にモジュールに使用される名前を変更することができます。

import foo as bar 
print bar.baz 
1

あなたがimport module_nameを行うとPythonインタプリタは、PYTHONPATH内のファイルmodule_name.extensionを探します。したがって、ファイルの名前を変更することなく、その名前を変更する必要はありません。しかし、もちろん、あなたが行うことができます。

import module_name as new_module_name 

あるいは

import module_name.submodule.subsubmodule as short_name 

便利です例えば。 DBコードを書くためのものです。

import sqlite3 as sql 
sql.whatever.. 

次に切り替えます。 sqlite3pysqliteインポートラインを変更するだけです

0

私はbsddbでこのような問題が発生しました。私はbsddb3モジュールをインストールする必要がありましたが、何百ものスクリプトがbsddbをインポートしました。すべてのインポートを変更する代わりに、bsddb3 eggを抽出し、site-packagesディレクトリにソフトリンクを作成して、 "bsddb"と "bsddb3"の両方を同じものにするようにしました。

関連する問題