关于python中引入别的py文件(引包)的问题
1、pip安装的包
pip安装的包一般存放在python 目录下,lib – site-packages 下。但是如果我们引入的时候会怎么找到这里呢
开始我以为我在环境变量里设置过这个路径,但是我查看了一下确实没有,而在python中查看sys.path会显示以下信息,相信大家都是大同小异,可以看到 lib/site-packages确实清除的在目录下
既然它在sys下输出的自然要查看sys的设置文件,这里在 lib 文件夹下有个 sysconfig.py文件,可以清除的看到,这些路径都是在里面设置好了的 然后通过os查看当前的路径再进行拼接。这也就是为什么pip安装的包可以找到了。
既然如此,那么,我们如果像引入自己的包就仿着这个就行,简单点的 ,如果需要经常使用,简单点直接丢到site-package文件下,建立一个文件夹,放入我们的代码是不是就可以了?
让我们 try 1 try:
1、在 lib\site-package 下创建一个文件夹 aaatest (这里是我随便取的,方便在前面一眼就能看到) 2、在aaatest文件中 创建一个 testtest.py 文件,里面就写了个 a=1 3、同时创建一个 init 文件,把testtest中的所有内容import进去
然后打开一个终端(就是cmd),然后运行python验证 果然可以吧~
2、自己写的代码
然后python还提供了一个增加路径的方法,那么,如果我的代码放在e盘,我在d盘的代码想要调用,只需要把e盘代码的路径增加到 sys.path中就行了。
代码
import sys
sys.path.append('e://test')
额,,,,,斜杠画反了,大家要注意。 然后在test文件下的py文件就可以调用了。。。
3、问题
然而。。。这里有个问题,由于我写代码的时候喜欢使用相对路径,这样我把目录复制或移动到别的目录时依然可以直接使用,而不用修改绝对路径。
所以上面的执行方法可能会遇到一个问题
举个栗子:
在 e:\\test 文件下 有
a.py 文件 b.txt 文件
a文件执行的时候会读取b.txt文件的内容然后初始化一些东西。
而我在 d:\\b.py 文件中,import a 时,则会报错找不到 b.txt 文件。
??? 我不是把路径加入到sys中了吗?
这里我想了个方法,在 a.py 中读入b.txt 文件时,使用os查一下当前的路径,然后和b.txt拼接起来,它看起来像这样。
import os
with open (os.path.abspath('./')+'\b.txt','r') as f:
txt = f.read()
当我满心欢喜的执行的时候。。。发现居然不行!
这时如果在 e:\a.py 文件中输出路径
print(os.path.abspath('./')+'\b.txt')
则会输出
d:\\b.txt
哈????好吧,先老老实实写绝对路径吧,有知道怎么解决的小伙伴请留言,多谢~
|