2.0 __init__py及包
创始人
2024-05-30 15:46:17
0
  1. Directory

新建2个目录,a目录中有个test.py,b目录中有个run.py,现在需要在run.py中调用test.py里的方法

#a/test.py
import randomdef random_sex():num = random.randint(1, 2)if num == 1:return '男'else:return '女'#b/run.py
from a.test import random_sex
print(random_sex())

在pycharm中右键运行,执行成功

使用python命令运行

python b/run.py

运行失败,提示找不到模块

输出sys.path

print(sys.path)#output
['D:\\workspace\\pycharm\\py_tools\\_case', 'C:\\Users\\javain\\.pyenv\\pyenv-win\\ver
sions\\3.9.5\\python39.zip', 'C:\\Users\\javain\\.pyenv\\pyenv-win\\versions\\3.9.5\\D
LLs', 'C:\\Users\\javain\\.pyenv\\pyenv-win\\versions\\3.9.5\\lib', 'C:\\Users\\javain
\\.pyenv\\pyenv-win\\versions\\3.9.5', 'D:\\workspace\\pycharm\\py_tools\\venv', 'D:\\
workspace\\pycharm\\py_tools\\venv\\lib\\site-packages']

当前项目的目录并没有添加在sys.path中

#b/run.py
import sys
sys.path.append(r'.')
from a.test import random_sex
random_sex()

执行python b/run.py,运行成功

注:如果py文件在根目录的话

from test import random_sex即可
  1. Pthon Package

每个pthon package都会有一个__init__.py文件

__init__.py的作用主要用来批量导入和简化导包

示例

#a/test1.py
def h():print('hello')
#a/test.py
import random
def random_sex():num = random.randint(1, 2)if num == 1:return '男'else:return '女'

如果a/__init__.py中为空的话,那么b/run.py文件使用这个包就必须按照如下方式使用

导入整个文件
from a import test
from a import test1
或者导入文件中的方法
from a.test import random_sex
from a.test1 import h 

如果a/__init__.py不为空的话,且内容如下

from a.test import random_sex
from a.test1 import h
import os

那么b/run.py中就应按如下方式使用

import a
a.random_sex()
a.h()
print(a.os.getcwd())或者from a import *
test.random_sex()
test.h()
print(os.getcwd())

如果__init__.py中有__all__参数的话

__all__ = ['h','random_sex','os']

则b/run.py中应按如下方式使用

import a
a.random_sex()
a.h()
print(a.os.getcwd())

如果要使用from的形式的话,需要按如下方式使用

from a import *
random_sex()
h()

从上述实验上来看,没有太大的区别

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...