python导包的问题_python问题(一) 导入包

python 相对路径导入包

这个是参考网上的做法,终于成功学会

核心思想:python在运行脚本的时候,会把当前路径设为main,无法通过相对路径访问上级目录,仅可访问当前目录及其子目录

问题引入

在构建python项目时,总是想import当前项目下的某些文件,有的时候我们的引入没有问题。

如上图,我们要运行dir_1目录下dir_1_run.py文件,如果该文件import了dir_1/file_1.py 或者 dir_1/dir_1_1/file_2.py,  没有问题,能成功。不成功的话在dir_1和dir_1_1目录下新建个__init__.py 文件。代码如下:

#not recommend

importfile_1importdir_1_1.file_2#recommend

from file_1 importfunc_1, ...from dir_1_1.file_2 import func_2, ...

但是当引用dir_2.file_1.py时,我们不能用 ..dir_2.file_1 这个路径import,Error,main没有..这个东西。(绝对路径忽略我)代码如下:

from ..dir_2/file_2 import func_3, ...

法一(不推荐)

一般的做法,也是我之前用的,代码如下:

#手动将上级目录导入系统路径

importsys

sys.path.append('..')

每个有这种需求的运行时脚本,都会在最前面写上这段代码,能不能不写?

法二

将dir_1_run.py 中要运行的代码独立成一个函数,然后新建一个run.py,就可以了。

#in dir_1/dir_1_run.py

from dir_2.file_2 importfunc_1deffunc():pass

#in run.py

from dir_1.dir_1_run importfuncif __name__ == 'main':

func()

Why?

实际上,在运行run.py 的时候,系统的work directory就是run.py所在的路径'.'。

在from dir_1/dir_1_run import func后,dir_1/dir_1_run.py 中 from dir_2.file_2 import func_1是在'.' 下执行的,那么自然能够找到dir_2文件夹及其目录下的文件。

原理

在运行脚本时,系统会假设当前路径名为'main',并不是'/dir_A/dir_B/'。

python找不到'/'这个符号,他就报错了。'..'这个操作就无法运行了。

合理的做法

在项目的最上层目录,建立需运行脚本,不要在某个目录下建小脚本,除非确定当前及以后用不到其他目录下的内容。

这时任何python代码文件引入其他python代码文件及访问data代码如下:

from dir_1.code_1 import...from dir_1_1.code_1_1 import

fromdir_2.code_2

data_path_1= './dir_1/dir_1_1/data'data_path_2= './dir_2/data'

因为我们知道,当前的工作路径一定是'.',所以这就是合理的引用方式。

在 code_1_1.py 中访问 dir_1/dir_1_1/data 也一定是这么引用的,而不是'./dir_1_1/data'

这时,你会发现,如果打开目录在'.'的话,pycharm也能找到索引了,而不是报错索引不到了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值