561

にある というファイルがありtester.pyます/project

/projectには、 という名前のサブディレクトリとlib、 という名前のファイルがありますBoxTime.py

/project/tester.py
/project/lib/BoxTime.py

BoxTimeから輸入したいtester。私はこれを試しました:

import lib.BoxTime

その結果:

Traceback (most recent call last):
  File "./tester.py", line 3, in <module>
    import lib.BoxTime
ImportError: No module named lib.BoxTime

サブディレクトリからインポートする方法BoxTimeはありますか?

編集

が問題でしたが、 as__init__.pyを参照するか、次を使用することを忘れないでください:BoxTimelib.BoxTime

import lib.BoxTime as BT
...
BT.bt_function()
4

12 に答える 12

635

パッケージのドキュメント (セクション 6.4)を見てください。

つまり、という名前の空のファイルを配置する必要があります

__init__.py

libディレクトリで。

于 2009-08-11T14:42:10.267 に答える
201
  • という名前のサブディレクトリを作成しますlib
  • という名前の空のファイルを作成しますlib\__init__.py
  • で、次のようなlib\BoxTime.py関数を記述します。foo()

    def foo():
        print "foo!"
    
  • 上記のディレクトリにあるクライアント コードに、次のようlibに記述します。

    from lib import BoxTime
    BoxTime.foo()
    
  • クライアント コードを実行します。あなたは得るでしょう:

    foo!
    

かなり後で -- Linux では、次のようになります。

% cd ~/tmp
% mkdir lib
% touch lib/__init__.py
% cat > lib/BoxTime.py << EOF
heredoc> def foo():
heredoc>     print "foo!"
heredoc> EOF
% tree lib
lib
├── BoxTime.py
└── __init__.py

0 directories, 2 files
% python 
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from lib import BoxTime
>>> BoxTime.foo()
foo!
于 2009-08-11T14:46:34.517 に答える
87

に挿入してみることができますsys.path

sys.path.insert(0, './lib')
import BoxTime
于 2013-02-21T09:47:42.243 に答える
43

libディレクトリを作成する必要があると誰もが示唆しているように見えるので、これを書き留めておきます。

サブディレクトリに名前を付ける必要はありませんlibanythingを入れれば、名前を付けることができます__init__.py

これを行うには、Linux シェルで次のコマンドを入力します。

$ touch anything/__init__.py 

これで、次の構造ができました。

$ ls anything/
__init__.py
mylib.py

$ ls
main.py

次に、次のようmylibにインポートできます。main.py

from anything import mylib 

mylib.myfun()

次のように関数とクラスをインポートすることもできます。

from anything.mylib import MyClass
from anything.mylib import myfun

instance = MyClass()
result = myfun()

内部に配置した変数関数またはクラスに__init__.pyもアクセスできます。

import anything

print(anything.myvar)

またはこのように:

from anything import myvar

print(myvar)
于 2018-10-03T14:11:35.887 に答える
23

試してみてくださいimport .lib.BoxTime。詳細については、PEP 328の相対インポートを参照してください。

于 2009-08-11T14:42:13.027 に答える
20

lib ディレクトリに__init__.pyファイルが含まれていますか?

Python は__init__.py、ディレクトリがモジュールかどうかを判断するために を使用します。

于 2009-08-11T14:44:44.893 に答える
16

完全な例が含まれています

これは基本的にすべてのケースをカバーします ( __init__.pyrelative/path/to/your/lib/folder にあることを確認してください):

import sys, os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/relative/path/to/your/lib/folder")
import someFileNameWhichIsInTheFolder
...
somefile.foo()

例:

プロジェクトフォルダーに次のものがあります。

/root/myproject/app.py

別のプロジェクト フォルダーにあります。

/root/anotherproject/utils.py
/root/anotherproject/__init__.py

/root/anotherproject/utils.pyその中にある foo 関数を使用して呼び出したいとします。

したがって、app.py に次のように記述します。

import sys, os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../anotherproject")
import utils

utils.foo()
于 2016-02-08T14:32:09.990 に答える
0

このフォルダ階層図の例:

/project/tester.py    
/project/lib/BoxTime.py

1- libフォルダー__init__.py内に空のpyファイルを作成します

2-呼び出し元のpyファイルtester.pyに、これらのコード行を追加します

import os, sys
sys.path.insert(0,'lib')# insert the folder lib in system path
from BoxTime import Function_name # from the py file import the needed function

簡単な説明はhereにあります。

注意: これは、異なるフォルダー内/からのモジュールの作成/インポートと呼ばれます。

個人的な経験: jupyter ノートブックからモジュールを作成しようとしましたが、うまくいきませんでした (.ipynb を使用して不適切に作成した可能性があります)。

于 2022-02-08T06:09:47.110 に答える
-3

これを試して:

from lib import BoxTime

于 2015-09-28T20:53:28.127 に答える