名前にダッシュまたはハイフン(-)を含むPythonモジュール


92

名前にダッシュを含む既存のpythonモジュール、foo-bar.pyがあります

モジュール名を変更することは、モジュールが共有されているため避けたいものであり、特別なケースが機能するように、使用されているすべての場所を追跡する必要があります。

名前に通常禁止されている「-」が含まれているモジュールをロードする方法はありますか?

(これはベストプラクティスではないことを理解しています。しかし、この状況では、はるかに大規模なアプリケーションのセットを再設計してテストしない方がいいでしょう。また、私の企業のマスターが実装に時間をかけることを承認しないと思いますそのような変化。)


5
IDEでファイル内検索を実行して、すべてfoo-barのをfoobar何かに置き換えることはできませんか?どれくらい難しいですか?
agf 2011



agf短い答え:それは私のコードのすべてではありません。
ハフマンをスキップする'28

S.Lott他のユーザーは商用アプリケーションです。それが可能だと私が知っている方法です。
ハフマンをスキップ

回答:


98

あなたはそれを使用してそれを行うことができます__import__()。例えば:

foobar = __import__("foo-bar")

ただし、実際にはモジュールの名前を変更する必要があります。これにより、モジュールのファイル名がプログラムで使用される識別子と異なる場合の混乱を回避できます。


4
ありがとう。私は、慣例が実際的なところに従うべきであることを理解しています。この特定の問題は、部門別のコードレビューで取り上げます。
ハフマンをスキップする'28

57

私はこの質問が質問者の満足度にすでに回答していることを知っていますが、ここに、を使用することにはいくつかのメリットがあると私が信じる別の回答があり__import__()ます。

import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()

ドキュメントによると:

"This provides an implementation of import which is portable to any 
Python interpreter. This also provides an implementation which is 
easier to comprehend than one implemented in a programming language 
other than Python."

Python 2.7 +のみ


5
私はこれを行う方法を探していましたが、あなたの答えは以前の答えより私の状況によく当てはまります。既存の質問に対する明確な回答を見つけて新しい回答として追加すると、私のような立場にいる人がすべての関連情報を1か所で見つけることができるので、常に良いことです。
Davy M

0

ハイフンの代わりにアンダースコアを使用してみてください。

pymysql_utilsをインポートする

import pymysql-utilsがpipで使用されるモジュールの名前であったにもかかわらず、私にとってはうまくいきました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.