Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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 关于uuu init_uuuuu.py的几个问题_Python_Module - Fatal编程技术网

Python 关于uuu init_uuuuu.py的几个问题

Python 关于uuu init_uuuuu.py的几个问题,python,module,Python,Module,环境:蟒蛇3.8 目录: test\ module1\ __init__.py mod1.py module2\ mod2.py main.py 1.我可以导入没有\uuuu init\uuuu.py的目录,为什么? 我想检查init.py的工作方式,因此我将module1和module2导入main.py # test\main.py from module1 import mod1 from mod

环境:蟒蛇3.8

目录:

test\
    module1\
           __init__.py
           mod1.py
    module2\
           mod2.py
    main.py

1.我可以导入没有
\uuuu init\uuuu.py
的目录,为什么? 我想检查init.py的工作方式,因此我将
module1
module2
导入
main.py

# test\main.py
from module1 import mod1
from module2 import mod2
在我看来,第2行应该会出现错误,因为我没有在
module2

但它们都可以进口

现在,我对
\uuuu init\uuuu.py
的工作原理感到困惑


2.我无法导入在
\uuuu init\uuuuuuuy.py
我尝试以以下方式在
main.py
中导入
mod1.py

# test\main.py
import module1
module.mod1.mod1_print() # mod1_print() is a function which is defined in mod1.py
因此,我将
mod1.py
导入
test\module1\\uuuu init\uuuu.py

# test\module1\__init__.py
import mod1
但是当我执行
main.py
时,我得到了这个错误:

D:\>"C:/Program Files/Python38/python.exe" d:/test/main.py
Traceback (most recent call last):
  File "d:/test/main.py", line 2, in <module>
    import module1
  File "d:\test\module1\__init__.py", line 1, in <module>
    import mod1
ModuleNotFoundError: No module named 'mod1'
D:\>“C:/ProgramFiles/Python38/python.exe”D:/test/main.py
回溯(最近一次呼叫最后一次):
文件“d:/test/main.py”,第2行,在
导入模块1
文件“d:\test\module1\\uuuu init\uuuuu.py”,第1行,在
导入mod1
ModuleNotFoundError:没有名为“mod1”的模块
我的问题是:

如果我想以以下形式导入
mod_print()
module.mod1.mod1_print()
,我应该怎么做

  • 请参见-python>=3.3删除了对
    \uuu init\uuuu.py
    的要求
  • 您可以在
    模块1/\uuuuu init\uuuuuu.py
    中尝试类似的操作:
  • 导入模块1.mod1
    
  • 请参见-python>=3.3删除了对
    \uuu init\uuuu.py
    的要求
  • 您可以在
    模块1/\uuuuu init\uuuuuu.py
    中尝试类似的操作:
  • 导入模块1.mod1
    
    Python3.3+提供了一个功能,允许它在不使用
    \uuu init\uuuu.py
    文件的情况下创建包

    允许隐式命名空间包意味着可以完全放弃提供init.py文件的要求,受影响的部分可以安装到一个公共目录中,也可以根据发行版的需要拆分到多个目录中

    Python3.3+提供了一个不需要
    \uuuu init\uuuuu.py
    文件就可以创建包的功能

    允许隐式命名空间包意味着可以完全放弃提供init.py文件的要求,受影响的部分可以安装到一个公共目录中,也可以根据发行版的需要拆分到多个目录中