我创建a.py
和b/__init__.py
:
$ ls
$ cat > a.py
import b
print "a"
$ mkdir b
$ cat > b/__init__.py
print "b"
它工作正常:
$ python a.py
b
a
我删除b/__init__.py
并在顶部文件夹中创建b.py
:
$ rm b/__init__.py
$ cat > b.py
print "new b"
$ python a.py
b
a
它不打印“new b”,而是打印“b”。为什么?你知道吗
Tags:
你刚刚删除了
b/__init__.py
,但是确实有一个b/__init__.pyc
,在你的a.py
中你仍然导入了b(import b
)。这可能会导致解释器假设已经是字节编译的,因为它看到了b/__init__.pyc
,并接受这个命令,这使得它以相同的顺序打印。你知道吗注意,这个命令
rm b/__init__.py
只是删除了文件,而不是文件夹或.pyc
。这也许就是原因。你知道吗试试
rm -r b
,你的代码应该能正常工作。你知道吗这确实是python解释器的预期行为。如果您不希望解释器对文件进行字节编译,您可以call it with the -B parameter但这不建议用于性能问题,因为byte-compiled code makes the program runs much faster。你知道吗
你可以阅读更多关于modules and byte-compiled files and search paths in the docs。你知道吗
希望这有帮助!你知道吗
相关问题 更多 >
编程相关推荐