把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案详解编程语言

把模块有关联的放在一个文件夹中

在python2中调用文件夹名会直接失败
在python3中调用会成功,但是调用不能成功

解决办法是:

在该文件夹下加入空文件__init__.py python2会把该文件夹整体当成一个包

然后编辑__init__.py 

加入__all__ = [“功能名1″,”功能名2”,…../或者类名也行]

再通过from . import 模块名

这样就可以调用包中那些模块功能了

#如果导入这个模块的方式是 from 模块名 import * ,那么仅仅会导入__all__的列表中包含的名字

举个栗子就清楚了:

当前我们有个包名为TestMsg,里面文件如下:

1.文件夹__pycache__:

__init__.cpython-35.pyc:

160d 0d0a 0072 f058 2d00 0000 e300 0000 
0000 0000 0000 0000 0002 0000 0040 0000 
0073 1d00 0000 6400 0067 0100 5a00 0064 
0100 6402 006c 0100 6d02 005a 0200 0164 
0300 5329 04da 0773 656e 646d 7367 e901 
0000 0029 0172 0100 0000 4e29 03da 075f 
5f61 6c6c 5f5f da00 7201 0000 00a9 0072 
0500 0000 7205 0000 00f5 4b00 0000 2f68 
6f6d 652f 7079 7468 6f6e 2f44 6573 6b74 
6f70 2f70 7974 686f 6e30 36e6 9c9f 2f70 
7974 686f 6ee5 9fba e7a1 802d 3130 2f30 
322d e58c 852f 5465 7374 4d73 672f 5f5f 
696e 6974 5f5f 2e70 79da 083c 6d6f 6475 
6c65 3e01 0000 0073 0200 0000 0902 

sendmsg.cpython-35.pyc

160d 0d0a 356e f058 3100 0000 e300 0000 
0000 0000 0000 0000 0002 0000 0040 0000 
0073 1000 0000 6400 0064 0100 8400 005a 
0000 6402 0053 2903 6300 0000 0000 0000 
0000 0000 0002 0000 0043 0000 0073 0e00 
0000 7400 0064 0100 8301 0001 6400 0053 
2902 4e7a 162d 2d2d 2d73 656e 646d 7367 
2d74 6573 7431 2d2d 2d2d 2d29 01da 0570 
7269 6e74 a900 7202 0000 0072 0200 0000 
f54a 0000 002f 686f 6d65 2f70 7974 686f 
6e2f 4465 736b 746f 702f 7079 7468 6f6e 
3036 e69c 9f2f 7079 7468 6f6e e59f bae7 
a180 2d31 302f 3032 2de5 8c85 2f54 6573 
744d 7367 2f73 656e 646d 7367 2e70 79da 
0574 6573 7431 0100 0000 7302 0000 0000 
0172 0400 0000 4e29 0172 0400 0000 7202 
0000 0072 0200 0000 7202 0000 0072 0300 
0000 da08 3c6d 6f64 756c 653e 0100 0000 
7300 0000 00

2.__init__.py

__all__ = ["sendmsg"] 
 
from . import sendmsg

3.__init__.pyc

03f3 0d0a 0072 f058 6300 0000 0000 0000 
0002 0000 0040 0000 0073 1d00 0000 6400 
0067 0100 5a00 0064 0100 6402 006c 0100 
6d02 005a 0200 0164 0300 5328 0400 0000 
7407 0000 0073 656e 646d 7367 6901 0000 
0028 0100 0000 5200 0000 004e 2803 0000 
0074 0700 0000 5f5f 616c 6c5f 5f74 0000 
0000 5200 0000 0028 0000 0000 2800 0000 
0028 0000 0000 7313 0000 0054 6573 744d 
7367 2f5f 5f69 6e69 745f 5f2e 7079 7408 
0000 003c 6d6f 6475 6c65 3e01 0000 0073 
0200 0000 0902 

4.recvmsg.py

def test2(): 
    print("-----recvmsg-test2---")

5.sendmsg.py

def test1(): 
    print("----sendmsg-test1-----")

6.sendmsg.pyc

03f3 0d0a 356e f058 6300 0000 0000 0000 
0001 0000 0040 0000 0073 0d00 0000 6400 
0084 0000 5a00 0064 0100 5328 0200 0000 
6300 0000 0000 0000 0001 0000 0043 0000 
0073 0900 0000 6401 0047 4864 0000 5328 
0200 0000 4e73 1600 0000 2d2d 2d2d 7365 
6e64 6d73 672d 7465 7374 312d 2d2d 2d2d 
2800 0000 0028 0000 0000 2800 0000 0028 
0000 0000 7312 0000 0054 6573 744d 7367 
2f73 656e 646d 7367 2e70 7974 0500 0000 
7465 7374 3101 0000 0073 0200 0000 0001 
4e28 0100 0000 5200 0000 0028 0000 0000 
2800 0000 0028 0000 0000 7312 0000 0054 
6573 744d 7367 2f73 656e 646d 7367 2e70 
7974 0800 0000 3c6d 6f64 756c 653e 0100 
0000 7300 0000 00

我们还有一个文件名为infordisplay.py

def test3(): 
    print("-----infordisplay-test3----")

摆放方式如下:

把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案详解编程语言

TestMsg文件夹下文件

把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案详解编程语言

__pycache__文件夹下文件

把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案详解编程语言

源码已给出 亲测有效 建议看此文的同学都能多多尝试!!!祝各位工作顺利 合家幸福 学习更上一层楼

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/11956.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论