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

这是目录结构:

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运行就可以了:

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的一部分导入,但是此功能不会反向移植到Python2。添加空的__init__.py应该意味着您也可以在Python 2中导入该软件包。

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

10-13 05:32