在正常的情况下,使用编译器执行Python文件,无需考虑环境变量的改变

例:sum

    --one

      --one1.py

    --two

      --two1.py

在执行one.py文件需要调用 two.py中某个方法,正常在编译器上的使用:from two import two1

在这里是涉及到一个名词,环境变量

我们利用Python的环境执行py文件时,需要到对应的目录下执行,但环境变量的出现,让我们在任何目录下可以执行py文件

查看当前环境变量

one1.py:

import os,sys
for i in sys.path:
print(i)

环境变量的操作在编译器已经帮我们做好了,无需我们考虑这些问题

但在实际的编译环境中并不会用编译器来执行文件,这时会存在一个问题,即当前执行当前文件时,sum目录的环境变量是不存在的,即无法正常调用:from two import two1

所以需要添加一个sum目录的环境变量

import os,sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../") #添加当前文件的上一层目录的环境变量, .. 为上一层目录
from two import two
for i in sys.path:
print(i)

这时你查看一下是否多了个sum目录的环境变量

这时的你很开心的以为万事大吉,殊不知在linux环境下还存在一个坑

Linux中按照以上的目录结构上是无法调用到two1.py文件的,因为我们是调用的是包(packages)下的模块two1.py,但是在上述的目录结构中two是一个文件夹,导致无法调用two1.py文件

一些关于模块的介绍:

包(packages)其实也是模块,其类型Type也是module。通常引用自定义模块时有两种方法:
  1)将两个文件放在同一目录下。
  2)在sys.path下添加要引用的py文件的路径。然后import。
这样的做法,对于少数文件是可行的,但如果程序数目很多,层级很复杂时就比较麻烦了。此时用package就能将多个py文件组织起来,类似于第三方包一样的引用。要方便很多。 package的层次结构与程序所在目录的层次结构相同,且必须包含一个__init__.py的文件。__init__.py可以为空,只要它存在就表明此目录被作为一个package处理。

so,正确的目录结构如下:

sum

 --one

  --__init__.py

  --one1.py

 --two

  --__init__.py

  --two1.py

最后附上一些模块解释的启发的文章:https://blog.csdn.net/maryhuan/article/details/22048763

Pyhon环境变量的一些坑的更多相关文章

  1. Ubuntu下 jdk环境变量设置

    流程 1. 官网下载对应的jdk文件 2. 在根目录 / 下创建一个java目录 mkdir /java 3. 使用mv命令 将下载下来的文件(压缩格式),移动到上一步创建的/java目录下   Ps ...

  2. 修改npm安装的全局路径和配置环境变量的坑

    修改npm安装的全局路径和配置环境变量的坑 转自:http://www.qdfuns.com/notes/30749/0f66fcf5e62eed010f744d0d4adaa870.html 我之前 ...

  3. Win10 jdk的安装以及环境变量的配置,及需要注意的坑

    此篇文章献给自己,希望下次长点记性 最近本人终于有时间开始学习appium,并且开始在电脑上配置环境,第一步就是在我那刚装的Win10 系统上安装jdk,过程并不顺利,由于之前都是用的win7,几乎都 ...

  4. windows-bat配置环境变量的几个坑点

    今天因为学校机房问题,想自动化安装vim,不料在编bat的时候不熟练,搞了很久. 坑点1.%path%访问到的是用户的path,而不是系统的path.所以增加环境变量的时候只能增加用户的path.我就 ...

  5. 一次saltstack环境变量的坑

    现场环境: salt-minion端: ip:10.0.3.149     环境:使用 nvm装的nodejs    受用nodejs自带的npm 安装pm2 sal-master端: IP:10.0 ...

  6. 记录安装 java 环境,部署环境变量遇到的小坑

    情况:先安装 jdk 7,再安装 jdk8,发现 java 的环境自动变成了 jdk8 解决: 1.在 系统的环境变量下,多出了一行: C:\Program Files (x86)\Common Fi ...

  7. 访问进程环境变量environ时的一个坑

    在unistd.h中定义了变量char **environ;来表示当前所有环境变量,一般来说访问特定环境变量可以用getenv,但是想遍历所有环境变量就得使用environ. 即在程序内全局声明ext ...

  8. JDK11安装后,环境变量的坑

    安装了最新的JDK11,安装完后设置环境变量,打开CMD,没生效 检查了3遍,都没发现问题,在PATH中将JAVA设置移到第一也不行 最后偶然发现,在点击如图右下的‘编辑文本’,用文本方式编辑时,发现 ...

  9. pyqt5环境变量踩坑记

    之前用一个cmd脚本 wmic ENVIRONMENT create name="QT_QPA_PLATFORM_PLUGIN_PATH",username="<s ...

随机推荐

  1. 从零开始学 Spring Boot

    1.下载 spring-tool-suite https://spring.io/tools3/sts/legacy 2.解压运行 sts-bundle\sts-3.9.7.RELEASE\STS.e ...

  2. 14-01 Java matches类,Pattern类,matcher类

    Pattern类 正则表达式常见规则 A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') B:字符类 [ ...

  3. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) —— 0.Learning Goals

    Learning Goals Understand multiple foundational papers of convolutional neural networks Analyze the ...

  4. 关于vue中钩子函数非常好的博客

    http://www.cnblogs.com/caimuqing/p/6728568.html

  5. CSS 基础:HTML 标记与文档结构(1)<思维导图>

    这段时间利用一下间隙时间学习了CSS的基础知识,主要目的是加深对CSS的理解,虽然个人主要工作基本都是后台开发,但是个人觉得系统学习一下CSS的基础还是很有必要的.下面我学习CSS时做的思维导图(全屏 ...

  6. Feign自定义编程配置

    介绍 在Spring Cloud中,Feign的默认配置类是FeignClientsConfiguration,该类定义了Feigh默认使用的编码器.解码器.所使用的契约等.Spring Cloud允 ...

  7. Spring Security使用报错 No bean named 'springSecurityFilterChain' is defined

    今天配置spring security时,运行报出No bean named 'springSecurityFilterChain' is defined错误,报错信息如下 严重: Exception ...

  8. 软工网络16个人作业2——WordCount

    Deadline: 2018-9-17 22:00PM,以博客提交至班级博客时间为准 要求参考来自:https://www.cnblogs.com/xinz/archive/2011/11/27/22 ...

  9. netty源码解解析(4.0)-9 ChannelPipleline的默认实现-链表管理

    io.netty.channel.DefaultChannelPipeline implements ChannelPipleline   DefaultChannelPiple给出了ChannelP ...

  10. 深入浅出 JVM GC(4)常用 GC 参数介绍

    # 前言 从前面的3篇文章中,我们分析了5个垃圾收集器,还有一些 GC 的算法,那么,在 GC 调优中,我们肯定会先判断哪里出现的问题,然后再根据出现的问题进行调优,而调优的手段就是 JVM 提供给我 ...