前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-运行环境及条件-01-环境变量path

Python-运行环境及条件-01-环境变量path

作者头像
zishendianxia
发布2020-05-13 20:15:12
1.3K0
发布2020-05-13 20:15:12
举报

系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 Python:3.6.0

  • 这个系列讲讲Python运行环境及条件
  • 今天讲讲环境变量:sys.path

Part 1:背景介绍

  1. 当代码从本台设备复制到另外一台设备时候,有的时候运行不了,提示某些模块找不到,如下图的提示。
  2. 示例的文件结构如下图,在path_explain包下,有两个包pack1pack2
    • path_explain下有一个path_example_3模块
    • pack1下有一个test_11模块
    • pack2下有一个path_example_1path_example_2模块

错误提示

代码文件组织结构

3. test_11内含有函数add

4. 想实现的功能如下:

  • path_example_1中调用add函数
  • path_example_2中调用add函数
  • path_example_3中调用add函数

Part 2:path_example_1中调用add函数

  1. path_example_1.pytest_11.py分别在两个平行的包pack1,pack2下面
import sysprint(sys.path)
from pack1.test_11 import add
x = 1y = 2z = add(x, y)print(z)

代码运行结果

  1. 提示无法找到pack1
  2. 我们在导入模块时,本质上是Python解释器在sys.path的地址中寻找对应的文件,我们在运行某个程序时,会默认将当前文件所在路径加入到sys.path中,其余的地址是默认的
    • 我们发现sys.path地址中存在E:\\Coding\\E_PythonWriting,这个是Pycharm自己加的,因为在Pycharm中我们打开这个文件夹作为根目录
    • cmd中运行path_example_1,发现路径中就没有E:\\Coding\\E_PythonWriting
  3. 因为在当前所有搜索路径中无法找到pack1,所以就会报错

Part 3:path_example_2中调用add函数

  1. path_example_2.pypath_example_1.py都在包pack1
  2. path_example_2.pytest_11.py分别在两个平行的包pack1,pack2下面
import sysimport os
# 搜索路径改变# 修改路径前print(sys.path)
path_1 = os.path.abspath(__file__)folder_address = os.path.dirname(path_1)
program_path = os.path.dirname(folder_address)
# 修改路径后print("\n")sys.path.append(program_path)print(sys.path)
from pack1.test_11 import add
x = 1y = 2z = add(x, y)print(z)

代码运行结果

  1. 运行正常,没有报错
  2. sys.path中新增了一个地址,为本py文件的上一级文件夹地址,这样就可以搜索到与本文件同级别的pack1包
  3. 当我们项目中有多个包,并且包之间存在引用,那么我们需要将该包的上一级文件夹加入sys.path中。关于加入sys.path的方法有3种(或者还有更多)
    • 方法1:如本文所示,在代码中增加,这种增加是临时的,运行完毕,则释放
    • 方法2:在我的电脑中的环境变量中增加,这种方法是永久的
    • 方法3:Python的安装环境中的Lib\site-packages环境下加入pth文本文件,文件中写入项目地址,这个方法是永久的
  4. 建议采用方法1,因为在自己编写的不同项目中,可能采用了同一个包名,但是功能略有不同,这样在搜索模块时会弄错

Part 4:path_example_3中调用add函数

  1. path_example_3.pytest_11.py对应包pack1的上一级文件夹中
import sys
from pack1.test_11 import add
print(sys.path)x = 1y = 2z = add(x, y)print(z)

运行结果

  1. 按照上文的解释,代码所在文件夹会纳入sys.path中,而pack1属于该文件夹的子文件夹下,会搜索到,所以无需修改sys.path
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档