4

私が開発している Python システムでは、通常、このモジュール構造を持っています。

mymodule/
mymodule/mymodule/feature.py
mymodule/test/feature.py

これにより、小さなテスト フレームワークで test/feature.py を簡単にインポートして単体テストを実行できます。ただし、いくつかのシェル スクリプト (Python で記述) が必要になりました。

mymodule/
mymodule/scripts/yetanotherfeature.py
mymodule/test/yetanotherfeature.py

Yetanotherfeature.py はモジュール Debian パッケージによって /usr/bin にインストールされます。しかし、そこに .py 拡張子を付けたくないのは明らかです。したがって、テスト フレームワークがモジュールをインポートできるようにするには、次のシンボリック リンクを実行する必要があります。

mymodule/
mymodule/scripts/yetanotherfeature
mymodule/scripts/yetanotherfeature.py @ -> mymodule/scripts/yetanotherfeature
mymodule/test/yetanotherfeature.py

Python でファイル名でモジュールをインポートすることは可能ですか、それともより洗練された解決策を考えられますか?

4

4 に答える 4

9

これにはimp モジュールが使用されます。

daniel@purplehaze:/tmp/test$ cat mymodule
print "woho!"
daniel@purplehaze:/tmp/test$ cat test.py 
import imp
imp.load_source("apanapansson", "mymodule")
daniel@purplehaze:/tmp/test$ python test.py
woho!
daniel@purplehaze:/tmp/test$ 
于 2009-05-19T08:55:32.477 に答える
2

ほとんどの場合、 import hooksを使用してトリッカーを使用できますが、お勧めしません。一方、私はおそらく逆の方法でそれを行い、.py スクリプトをどこかに置き、.py ファイルへの「.py」のないシンボリック リンクを作成します。したがって、ライブラリはどこにでもある可能性があり、通常のインポートによって内部からテストを実行でき (py 拡張子があるため)、/usr/bin/yetanotherfeature がそれを指すため、py なしで実行できます。

編集:これを気にしないでください(少なくともフックの部分)、インポートインプソリューションは私にはとても良さそうです:)

于 2009-05-19T08:59:37.427 に答える
1

impモジュールをチェックしてください:

http://docs.python.org/library/imp.html

これにより、ファイル名でモジュールをロードできます。しかし、あなたのシンボリックリンクはよりエレガントなソリューションだと思います.

于 2009-05-19T08:53:46.003 に答える
0

別のオプションは、setuptools を使用することです。

「...Windows と POSIX プラットフォームの両方で、スクリプトのファイル名をローカルの規則と一致させる簡単な方法はありません。別の例として、実際の「メイン」が関数をどこかのモジュールに... setuptools は、正しい拡張子のスクリプトを自動的に生成することで、これらの問題をすべて解決します。Windows では、.exe ファイルも作成します..."

https://pythonhosted.org/setuptools/setuptools.html#automatic-script-creation

于 2014-07-07T05:30:10.940 に答える