python源代码组织和_init.py__
我有一个python源代码树,其组织如下:python源代码组织和_init.py__,python,packages,Python,Packages,我有一个python源代码树,其组织如下: >folder |-> utils |-> image.py |-> helper.py |-> __init__.py |-> core |-> vf.py |-> __init__.py 现在在vf.py中,我有以下行要导入utils import utils 然后我做了一些类似的事情: img = ut
>folder
|-> utils
|-> image.py
|-> helper.py
|-> __init__.py
|-> core
|-> vf.py
|-> __init__.py
现在在vf.py中,我有以下行要导入utils
import utils
然后我做了一些类似的事情:
img = utils.Image()
现在,如果我将utils目录中的\uuuu init\uuuu.py
文件保留为空,则此操作不起作用,并且会出现错误:
AttributeError: 'module' object has no attribute 'Image'
但是,如果我在utils目录的\uuuu init\uuuu.py
中添加以下行,它将起作用:
from image import *
from helper import *
因此,我猜想,当调用顶级脚本时,它会解析这个\uuu init\uuuuuuuy.py
文件,并从这个utils包导入所有方法和类。但是,我觉得这不是一个好主意,因为我正在进行*导入,这可能会污染名称空间
因此,我想知道是否有人能解释一下实现这一点的适当方法,也就是说,如果我有并行目录,那么将类从一个python包导入到另一个python包的好方法是什么(如果这种\uu init\uuuuuuuuupy
方法确实不像我所怀疑的那样干净)。您尝试过使用“img=utils.image.image()”吗?
如果“Image”类是在“Image.py”文件中定义的,我认为这会起作用。您尝试过使用“img=utils.Image.Image()”吗?
如果“Image”类是在“Image.py”文件中定义的,我认为这会起作用。您尝试过使用“img=utils.Image.Image()”吗?
如果“Image”类是在“Image.py”文件中定义的,我认为这会起作用。您尝试过使用“img=utils.Image.Image()”吗?
如果“Image”类是在“Image.py”文件中定义的,我认为这会起作用。导入模块时,会执行
\uuuu init\uuuuuuuuupy
文件。因此,当您编写import-utils
时,将调用\uu init\uuuuuuuuuuuuupy.py
中的代码,并从Image.py导入Image
类
例如,将以下代码写入\uuuu init\uuuu.py
:
print("Hello, my utils module!")
(仅用于测试,ofc!)
当您执行程序时,您将看到此文本当您导入模块时,将执行
\uuuu init\uuuuuuy.py
文件。因此,当您编写import-utils
时,将调用\uu init\uuuuuuuuuuuuupy.py
中的代码,并从Image.py导入Image
类
例如,将以下代码写入\uuuu init\uuuu.py
:
print("Hello, my utils module!")
(仅用于测试,ofc!)
当您执行程序时,您将看到此文本当您导入模块时,将执行
\uuuu init\uuuuuuy.py
文件。因此,当您编写import-utils
时,将调用\uu init\uuuuuuuuuuuuupy.py
中的代码,并从Image.py导入Image
类
例如,将以下代码写入\uuuu init\uuuu.py
:
print("Hello, my utils module!")
(仅用于测试,ofc!)
当您执行程序时,您将看到此文本当您导入模块时,将执行
\uuuu init\uuuuuuy.py
文件。因此,当您编写import-utils
时,将调用\uu init\uuuuuuuuuuuuupy.py
中的代码,并从Image.py导入Image
类
例如,将以下代码写入\uuuu init\uuuu.py
:
print("Hello, my utils module!")
(仅用于测试,ofc!)
当你执行你的程序时,你会看到这段文字,我不得不做一些事情:
from utils import image
img = image.Image()
或者
from utils.image import Image
img = Image()
然后我可以留下一个空白的
\uuuu init\uuuu.py
文件,它很好。我必须做一些事情,比如:
from utils import image
img = image.Image()
或者
from utils.image import Image
img = Image()
然后我可以留下一个空白的
\uuuu init\uuuu.py
文件,它很好。我必须做一些事情,比如:
from utils import image
img = image.Image()
或者
from utils.image import Image
img = Image()
然后我可以留下一个空白的
\uuuu init\uuuu.py
文件,它很好。我必须做一些事情,比如:
from utils import image
img = image.Image()
或者
from utils.image import Image
img = Image()
然后我可以留下一个空白的
\uuuu init\uuuuuuuuuuuuuupy
文件,它很好。我以为它是\uuuuuuu init\uuuuuuuuuupy
而不是\uuuuuuuuuu init.py
。为什么猜猜它是怎么工作的?你看过文件了吗?我以为它是\uuuu init\uuuuuuy.py
而不是\uuuuuu init.py\uuuuuuuu
。为什么猜猜它是怎么工作的?你看过文件了吗?我以为它是\uuuu init\uuuuuuy.py
而不是\uuuuuu init.py\uuuuuuuu
。为什么猜猜它是怎么工作的?你看过文件了吗?我以为它是\uuuu init\uuuuuuy.py
而不是\uuuuuu init.py\uuuuuuuu
。为什么猜猜它是怎么工作的?你看过文件了吗?是的,导入*
不是一个好主意。只导入您需要的图像。是的,导入*
不是一个好主意。只导入您需要的图像。是的,导入*
不是一个好主意。只导入您需要的图像。是的,导入*
不是一个好主意。导入您需要的图像。