问题记录,关于PYTHONPATH和abc.py

起因:
今天在学习tensorflow的参数传入tf.flags时, 写了一个简单的测试代码,随意命名为abc.py,放在desktop目录下准备进行测试。

问题:

结果在该目录下输入python的任意指令都会报错如下:

Fatal Python error: Py_Initialize: can't initialize sys standard streams
Traceback (most recent call last):
  File "/home/tk/.conda/envs/py35/lib/python3.5/io.py", line 52, in <module>
  File "/home/tk/Desktop/abc.py", line 3, in <module>
ImportError: No module named 'tensorflow'

看到这个报错当时很懵逼,ImportError显然是不存在的。

解决过程:

于是去百度搜了一下
Fatal Python error: Py_Initialize: can't initialize sys standard streams
找到一个答案说先在终端输入
PYTHONPATH=“”
再执行python指令。
试了一下,果然没有问题,成功。
回答问题的人把问题归结为conda 新建的虚拟环境的PYTHONPATH冲突,我觉得不怎么对。
因为我在其他路径执行python是没有问题的,我觉得是路径的问题。

再搞了一阵,得不到解决之后,突然开窍了,
去看了一下/home/tk/.conda/envs/py35/lib/python3.5/io.py的源代码,问题迎刃而解。
io.py 的52行,是

import abc

于是,我在py35/lib/python3.5文件夹下找到了abc.py。
我晕,原来abc除了是个卫生巾的牌子,还是个python的自建模块,还是自己基础知识掌握的不牢啊。。
我在Desktop目录下执行python, io.py这个文件import的是我Desktop下的abc.py ,所以出了问题。

我把desktop下的abc.py改成其他名字,果然莫得问题了。
但是为什么在运行之前输入PYTHOHPATH=""也可以呢?
我分别在PYTHONPATH=“”和不做这个操作的情况下进入python终端,查看path,

import sys
sys.path

正常情况下,python会把当前路径(pwd)和你自定义的python环境变量加入path,而且顺序在默认路径之前。
而输入PYTHONPATH=""之后,只有python的默认路径了。
这下彻底明白咯。
我desktop下的那个py文件改回abc.py,但是终端cd到其他路径与运行 Desktop/abc.py,果然莫得问题了。

这时我想到了 future 模块的absolute_import , 我在io.py 文件中加入

from __future__ import absolute_import 

我天真的以为,这时候python会略过当前文件路径的模块了,
结果失败,因为这个指令是让python调用sys.path路径的模块,
然而,在Desktop下运行python,该路径已经被加入到sys.path了。

总结

1.py文件,模块文件命名尽量避免与系统模块冲突;
2.在终端运行Python之前,可以设置PYTHONPATH=“xxx” 加入想要加入的path,就像pycharm的"mark directory as source root"功能差不多吧。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,330评论 0 10
  • IO密集型程序、深拷贝和浅拷贝、模块导入、with 语句 1.1 GIL 学习目标 1. 能够说出 GIL 是什...
    Cestine阅读 1,126评论 0 0
  • 模块和包 一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是...
    go以恒阅读 2,345评论 0 4
  • pyton review 学习指南 https://www.zhihu.com/question/29138020...
    孙小二wuk阅读 1,192评论 0 2
  • “靓女,靓女,付款图给我看一下!”早上在菜市场买菜,临走前又在拐角摊位熟识的大爷那买了一把青菜,还没出市场大门,大...
    一水心安阅读 379评论 0 0

友情链接更多精彩内容