簡體   English   中英

sys.path修改不適用於python2,但適用於python3

[英]sys.path modification not working for python2 but works for python3

我正在嘗試在腳本'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運行就可以了:

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-path ,在sys.path變量應適用於python2以及為python3。

那我做錯了什么?

您的foo軟件包沒有__init__.py文件來將其標識為軟件包。 在Python 3下,仍可以將其作為名稱空間包的一部分導入,但是此功能不會反向移植到Python2。添加空的__init__.py應該意味着您也可以在Python 2中導入該包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM