Directory
新建2个目录,a目录中有个test.py,b目录中有个run.py,现在需要在run.py中调用test.py里的方法
#a/test.py
import random
def 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即可
Python Package
每个python 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()
从上述实验上来看,没有太大的区别