Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python子文件夹导入混乱_Python_Python 3.x_Python 3.3_Python Import_Python Module - Fatal编程技术网

python子文件夹导入混乱

python子文件夹导入混乱,python,python-3.x,python-3.3,python-import,python-module,Python,Python 3.x,Python 3.3,Python Import,Python Module,假设我有一个如下所示的文件夹结构: . ├── A │   ├── a.py │   └── b.py └── main.py 这些文件包含以下内容: b、 py: a、 py: main.py: from A import a 如果运行python3.3 A/A.py或python3.3 B/B.by,则不会出现错误。但是,如果运行python3.3 main.py,则会发生以下错误: Traceback (most recent call last): File "main.py",

假设我有一个如下所示的文件夹结构:

.
├── A
│   ├── a.py
│   └── b.py
└── main.py
这些文件包含以下内容:

b、 py:

a、 py:

main.py:

from A import a
如果运行
python3.3 A/A.py
python3.3 B/B.by
,则不会出现错误。但是,如果运行
python3.3 main.py
,则会发生以下错误:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from A import a
  File "/tmp/python_imports/A/a.py", line 1, in <module>
    from b import BClass
ImportError: No module named 'b'
回溯(最近一次呼叫最后一次):
文件“main.py”,第1行,在
从进口
文件“/tmp/python\u imports/A/A.py”,第1行,在
从b导入b类
ImportError:没有名为“b”的模块
将a.py中的导入行更改为
import a.b
会起作用,但显然
python3.3 a/a.py
会失败。实际上,我对运行
python3.3 A/A.py
不感兴趣,但我希望模块可以从多个位置导入。因此,a.py应导入b.py,而不管a.py导入到何处


如何解决此问题?

您需要
A
目录中的
初始化.py
文件(空的就可以了)。否则,python不会将其识别为包


现在您是一个is包,应该使用绝对导入或显式相对导入。在这种情况下,在
A/A.py
中,使用A.b import BClass中的
或.b import BClass中的
A
目录中需要一个
\u init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
文件(空即可)。否则,python不会将其识别为包


现在您是一个is包,应该使用绝对导入或显式相对导入。在这种情况下,在
A/A.py
中,使用A.b import BClass
中的
或.b import BClass中的
A
目录中需要一个
\u init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
文件(空即可)。否则,python不会将其识别为包


现在您是一个is包,应该使用绝对导入或显式相对导入。在这种情况下,在
A/A.py
中,使用A.b import BClass
中的
或.b import BClass中的
A
目录中需要一个
\u init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
文件(空即可)。否则,python不会将其识别为包


现在您是一个is包,应该使用绝对导入或显式相对导入。在这种情况下,在
A/A.py
中,使用A.b import BClass中的
或.b import BClass中的
导入BClass

除了我在注释中提到的包必须导入的
\u init\uuuuuuuuuuuuuuuuuuuuuuuuuu.py
之外,还需要相对导入同级模块:

from .b import BClass
然后它也可以在Python3中工作

当然,您也可以导入全名:

from A.b import BClass
但是,您的模块在包树中不容易重新定位

但是,无论哪种方式,您都不能将
a.py
作为独立的应用程序使用。要实现这一点,您需要在
import
语句周围加上
try
/
除了
,并在第一个版本失败时尝试其他版本:

try:
  from .b import BClass
except ValueError:
  from b import BClass

但这是可以理解的。在更大的系统中,模块可能依赖于包中的其他模块,否则它们可能不应该是包的一部分,而是独立的。如果存在这种依赖关系,那么将模块当作独立模块使用当然会有问题。

除了我在评论中提到的包必须使用的
\uuu init\uuuuuuuuupy
之外,您还需要相对导入同级模块:

from .b import BClass
然后它也可以在Python3中工作

当然,您也可以导入全名:

from A.b import BClass
但是,您的模块在包树中不容易重新定位

但是,无论哪种方式,您都不能将
a.py
作为独立的应用程序使用。要实现这一点,您需要在
import
语句周围加上
try
/
除了
,并在第一个版本失败时尝试其他版本:

try:
  from .b import BClass
except ValueError:
  from b import BClass

但这是可以理解的。在更大的系统中,模块可能依赖于包中的其他模块,否则它们可能不应该是包的一部分,而是独立的。如果存在这种依赖关系,那么将模块当作独立模块使用当然会有问题。

除了我在评论中提到的包必须使用的
\uuu init\uuuuuuuuupy
之外,您还需要相对导入同级模块:

from .b import BClass
然后它也可以在Python3中工作

当然,您也可以导入全名:

from A.b import BClass
但是,您的模块在包树中不容易重新定位

但是,无论哪种方式,您都不能将
a.py
作为独立的应用程序使用。要实现这一点,您需要在
import
语句周围加上
try
/
除了
,并在第一个版本失败时尝试其他版本:

try:
  from .b import BClass
except ValueError:
  from b import BClass

但这是可以理解的。在更大的系统中,模块可能依赖于包中的其他模块,否则它们可能不应该是包的一部分,而是独立的。如果存在这种依赖关系,那么将模块当作独立模块使用当然会有问题。

除了我在评论中提到的包必须使用的
\uuu init\uuuuuuuuupy
之外,您还需要相对导入同级模块:

from .b import BClass
然后它也可以在Python3中工作

当然,您也可以导入全名:

from A.b import BClass
但是,您的模块在包树中不容易重新定位

但是,无论哪种方式,您都不能将
a.py
作为独立的应用程序使用。要实现这一点,您需要在
import
语句周围加上
try
/
除了
,并在第一个版本失败时尝试其他版本:

try:
  from .b import BClass
except ValueError:
  from b import BClass
但这是可以理解的。在更大的系统中,模块可能依赖于包中的其他模块,否则它们可能不应该是包的一部分,而是独立的。如果有这样的依赖关系,使用一个模块就像我