web-dev-qa-db-ja.com

Import python module not path

Util.pyとbar.pyを含むモジュールfooがあります。

IDLEまたはpythonセッションでインポートしたいのですが、どうすればいいですか?

現在のディレクトリまたはデフォルトのpython PATH。)にないモジュールをインポートする方法に関するドキュメントは見つかりませんでした。import "<full path>/foo/util.py"およびfrom "<full path>" import utilを試した後

一番近いものは

import imp
imp.load_source('foo.util','C:/.../dir/dir2/foo')

これにより、Windows 7で許可が拒否されました。

48
Vort3x

1つの方法は、単に path を修正することです。

import sys
sys.path.append('C:/full/path')
from foo import util,bar

これには、fooがpythonパッケージである必要があることに注意してください。つまり、__init__.pyファイル。変更したくない場合はsys.pathPYTHONPATH環境変数も変更 または システムにモジュールをインストール 。これは他のディレクトリまたは.pyそのディレクトリ内のファイルが誤ってロードされる可能性があります。

したがって、 imp.load_source 代わりに。ディレクトリではなくファイル名が必要です(現在のユーザーが読み取りを許可されているファイルへ):

import imp
util = imp.load_source('util', 'C:/full/path/foo/util.py')
66
phihag

PYTHONPATH環境変数を使用してモジュール検索パスをカスタマイズするか、sys.pathディレクトリリスト。

モジュール検索パス python.orgのドキュメントを参照してください。

5
icecrime

これを試してみてください

import sys
sys.path.append('c:/.../dir/dir2')
import foo
2
Levon

Phihagのヒントに続いて、この解決策があります。ソースファイルのパスをload_srcに渡すだけで、ロードされます。また、名前を指定する必要があるため、この名前を使用してこのモジュールをインポートできます。より明示的であるため、私はこの方法を好む:

def load_src(name, fpath):
    import os, imp
    return imp.load_source(name, os.path.join(os.path.dirname(__file__), fpath))

load_src("util", "../util.py")
import util

print util.method()

別の(それほど明確ではない)方法は次のとおりです。

util = load_src("util", "../util.py")    # "import util" is implied here

print util.method()    # works, util was imported by the previous line

編集:メソッドはより明確にするために書き直されます。

1
Jabba