问题背景
在windows下使用pycharm开发python程序,包导入正常,但是移植到Linux却说包找不到了,No module named 'xxx'
python包路径搜索机制
python搜索包的路径存储在sys.path下
临时添加python搜索包路径的方法:
import sys
sys.path.append(‘路径’)
小例子
sys.path返回一个列表,里面装的字符串,也就是搜索路径。
然后删除掉第一个,接着导入与 main.py同级目录的模块,发现导入失败。
import sys del sys.path[0] import testPackage.module1
重点问题
项目目录结构
-package1
-main1.py
-test_directory
--main2.py (放置在test文件夹下面)
如果是在main1.py中导入package1,完全OK,没有任何问题
如果是在main2.py中导入package1,出问题,找不到包
如何解决呢?
首先可以想到的是通过sys.path.append添加package1所在目录的绝对路径,这样可以解决问题,但是肯定不推荐,下载换个环境还得设置路径。
推荐方法
import os import sys dir_now=sys.path[0] dir_up=os.path.dirname(dir_now) dir_upup=os.path.dirname(dir_up) print(dir_now) print(dir_up) print(dir_upup)
首先是如何获取当前文件的所在目录,上级目录,上上级目录,注意这里是相对当前文件的目录(而不是执行时的工作目录)
然后我们就可以把相应的目录通过sys.path.append()添加进来
final
import os
import sys
dir_now=sys.path[0]
dir_up=os.path.dirname(dir_now)
dir_upup=os.path.dirname(dir_up)
print(dir_now)
print(dir_up)
print(dir_upup)
sys.path.append(os.path.dirname(sys.path[0]))
import testPackage.module1
#sys.path.append(os.path.dirname(os.path.dirname(sys.path[0]))) 添加上上级目录 根据自己项目选择