python - sys.path 修改不适用于 python2 但适用于 python3

标签 python

我正在尝试在脚本 'main/main.py' 中导入模块 foo.foo

目录结构如下:

chenjiasheng@ubuntu:~/code/test$ pwd
/home/chenjiasheng/code/test
chenjiasheng@ubuntu:~/code/test$ find
.
./foo
./foo/foo.py
./main
./main/main.py

而这两个文件的内容是:

chenjiasheng@ubuntu:~/code/test$ cat ./foo/foo.py 
pass
chenjiasheng@ubuntu:~/code/test$ cat ./main/main.py 
import sys
sys.path.append('/home/chenjiasheng/code/test')
print(sys.path)
import foo.foo

“main/main.py”应该将“foo/”附加到其模块搜索路径。 但是用 python2 运行它会得到 ImportError:

chenjiasheng@ubuntu:~/code/test$ python2 main/main.py 
['/home/chenjiasheng/code/test/main', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linues', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/home/chenjiasheng/code/test']
Traceback (most recent call last):
  File "main/main.py", line 4, in <module>
    import foo.foo
ImportError: No module named foo.foo

相比之下,用python3运行就OK了:

chenjiasheng@ubuntu:~/code/test$ python3 main/main.py 
['/home/chenjiasheng/code/test/main', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linu
chenjiasheng@ubuntu:~/code/test$

根据手册,https://docs.python.org/2/tutorial/modules.html#the-module-search-pathsys.path 变量应该适用于 python2 和 python3。

那我做错了什么?

最佳答案

您的 foo 包没有 __init__.py 文件来将其标识为包。在 Python 3 下,这仍然可以作为 namespace package 的一部分导入,但此功能未向后移植到 Python 2。添加一个空的 __init__.py 应该意味着您也可以在 Python 2 中导入该包。

关于python - sys.path 修改不适用于 python2 但适用于 python3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44043843/

相关文章:

python - distutils.util.split_quoted 和 shlex.split 之间有什么区别

python - MATLAB 中对称矩阵的复特征向量

python - 为什么我不能在同一个模块中实例化一个实例?

python - 从 parent 实例化 child

python - 提高Python脚本速度: Multithreading or Multiple Instances?

python-3.x - 在 Python 3 中替换 getstatusoutput

python - Pandas-如何获取另一列中每个对应值的行出现次数

python - 从两个类别列 pandas 创建一个类别列

Python 相当于 Perl $+ aka $LAST_PAREN_MATCH

python - 是否有 python libsvn 的 Windows 实现?