1

このディレクトリ構造があるとします

package /
         __init__.py
         cpackage.py

        subpackage1/
                    __init__.py
                    subpack1_call.py

                    /lib
                        __init__.py
                        sub_lib.py
        subpackage2/
                    __init__.py
                    subpack2_call.py

cpackage を subpackage1 と subpackage2 にインポートしたいのですが、インポートできません valuename エラーと module not found エラーが発生します

subpackage1でこれを簡単に行うことができる場所

from lib.sub_lib import hello_pr

hello_pr() 

ここではエラーは発生せず、hello_pr は sub_lib で定義した内容を出力しますが、ディレクトリを上に移動することはできません。上記の場合と同様に、ディレクトリ構造を簡単に下に移動できます。

何が欠けていますか。私はこのサイトとpydocで非常に多くのソリューションを調べましたが、何かが欠けている可能性があります。

4

2 に答える 2

1

あなたの質問を数回解析して再解析した後、あなたが探しているのはrelative importsであると判断しました。

from ..cpackage import somename
于 2013-01-25T07:17:03.847 に答える
1

lib.sub_lib をインポートできる場合は、PYTHONPATH が subpackage1 を指していることを意味します。パッケージを含むディレクトリを指している必要があります。その後、package.cpackage、package.subpackage1.lib.sub_lib などをインポートできます。

また、PYTHONPATH を cpackage に向けてから、このディレクトリのinit .py を不要なので削除し、cpackage、subpackage1.lib.sub_lib などをインポートすることもできます。

基本的なルールは次のとおりです。PYTHONPATH=dir の場合、

dir\
  bob.py
  sub\
    __init__.py
    bib.py
    inner\
      __init__.py
      bub.py

import bob
import sub       (will import sub\__init__.py)
import sub.bib   (will import sub\__init__.py then bib.py)
import sub.inner (will import sub\__init__.py then sub\inner\__init__.py)
import sub.inner.bub (will import sub\__init__.py then sub\inner\__init__.py
                      and finally bub.py)
于 2013-01-25T07:18:18.587 に答える