最近自己写了个flask小程序,具体路径如图
test01.py脚本
import sys
print("test01系统路径:",sys.path)
from s1pro_flask.views import getname
f=getname.getmainame
f()
getname.py脚本
import sys
print("getname.sys.path路径是:",sys.path)
from s1pro_flask.views.account import *
def getmainame():
print(__name__)
执行test01.py
运行结果
F:python3.6python.exe F:/pyprogram3/s1pro_flask/test01.py test01系统路径: ['F:\pyprogram3\s1pro_flask', 'F:\pyprogram3', 'F:\python3.6\python36.zip', 'F:\python3.6\DLLs', 'F:\python3.6\lib', 'F:\python3.6', 'F:\python3.6\lib\site-packages'] getname.sys.path路径是: ['F:\pyprogram3\s1pro_flask', 'F:\pyprogram3', 'F:\python3.6\python36.zip', 'F:\python3.6\DLLs', 'F:\python3.6\lib', 'F:\python3.6', 'F:\python3.6\lib\site-packages'] s1pro_flask.views.getname
可以看出来getname模块的sys.path路径和test01.py路径相同
直接运行getname.py脚本结果是:
F:python3.6python.exe F:/pyprogram3/s1pro_flask/s1pro_flask/views/getname.py getname.sys.path路径是: ['F:\pyprogram3\s1pro_flask\s1pro_flask\views', 'F:\pyprogram3', 'F:\python3.6\python36.zip', 'F:\python3.6\DLLs', 'F:\python3.6\lib', 'F:\python3.6', 'F:\python3.6\lib\site-packages'] Traceback (most recent call last): File "F:/pyprogram3/s1pro_flask/s1pro_flask/views/getname.py", line 4, infrom s1pro_flask.views.account import * ModuleNotFoundError: No module named 's1pro_flask.views'
路径和上面test01程序调用的路径不一致,还报错了识别不了s1pro_flask.views这个模块
对getname.py进行修改
import sys
print("getname.sys.path路径是:",sys.path)
from account import *
def getmainame():
print(__name__)
F:python3.6python.exe F:/pyprogram3/s1pro_flask/s1pro_flask/views/getname.py getname.sys.path路径是: ['F:\pyprogram3\s1pro_flask\s1pro_flask\views', 'F:\pyprogram3', 'F:\python3.6\python36.zip', 'F:\python3.6\DLLs', 'F:\python3.6\lib', 'F:\python3.6', 'F:\python3.6\lib\site-packages'] Process finished with exit code 0
顺利执行了程序
在修改getname.py脚本
import sys
print("getname.sys.path路径是:",sys.path)
from .account import *
def getmainame():
print(__name__)
运行结果
F:python3.6python.exe F:/pyprogram3/s1pro_flask/s1pro_flask/views/getname.py getname.sys.path路径是: ['F:\pyprogram3\s1pro_flask\s1pro_flask\views', 'F:\pyprogram3', 'F:\python3.6\python36.zip', 'F:\python3.6\DLLs', 'F:\python3.6\lib', 'F:\python3.6', 'F:\python3.6\lib\site-packages'] Traceback (most recent call last): File "F:/pyprogram3/s1pro_flask/s1pro_flask/views/getname.py", line 4, infrom .account import * ModuleNotFoundError: No module named '__main__.account'; '__main__' is not a package Process finished with exit code 1
可以看出来如果程序运行的时候__name__==‘main’的时候这个程序默认就是最顶点了,相对路径已经不合适.出现’main’ is not a package …会出现
from …views import account
ValueError: attempted relative import beyond top-level package
但是调用test01.py再次执行可以顺利执行
调用test01.py执行的时候这两种写法都没得问题
import sys
print("getname.sys.path路径是:",sys.path)
from .account import *
def getmainame():
print(__name__)
import sys
print("getname.sys.path路径是:",sys.path)
from s1pro_flask.views.account import *
def getmainame():
print(__name__)
这两种写法均行



