python开发过程中遇到引用其它目录下的模块的问题。网上查了很多资料,都没有成功,造成了很多误导,浪费了很多时间,现将成功的方法,记录如下,希望可以帮助后来人:
以前的坑放在这里,提示后人
1、不需要 __init__py 文件,任何目录都不需要!
2、不需要将目录标记为任何特殊文件夹!
3、sys.path.aapend("..")是错误的,通过print发现只是添加了一个字符串“.."并没有自动将“.."转换为上级目录的路径!
pycharm中环境、文件位置、代码、执行结果如下图所示
代码如下:复制后,路径名“Basic”需要改下(取得父目录路径的代码有误,新的代码更新如下)
#这里test.py中的代码
import sys, os
print("打印原本的sys.path内容")
for li in sys.path:
print(li)
print("打印添加上级目录和模块所以目录的路径后的sys.path")
current_path = os.getcwd().replace('\\', '/') # 获取当前路径
i = current_path.rindex('/')
parent_path = current_path[:i] # 取得上级目录路径
sys.path.append(parent_path) #添加到上级目录路径到sys.path中
aa = parent_path + r"/Basic" #引用其经目录时,需要改这里。
sys.path.append(aa)# 将包所在的路径加到sys.path中
for li in sys.path:
print(li)
from DataHelper import MysqlDbHelp
mysql = MysqlDbHelp()
mysql.getPrint() # getprint() 是一个测试调用是否成功的方法,只是打印一个字符串
新的代码:(考贝代码以下代码代替上边的代码即可)
import sys,os
current_path=os.path.dirname(__file__) #获取当前文件的路径
parent_path=os.path.dirname(os.path.dirname(__file__)) # 得到上父目录的路径
sys.path.append(parent_path) # 添加到上级目录路径到sys.path中
import_path = parent_path + r"/Basic"
sys.path.append(import_path) # 将包所在的路径加到sys.path中
思考:将来是不是可以做成一个函数,将所有目录都一起加载好,然后在程序的启动入口,调用一下。这样就不用担心找到模块的问题了。