0

我创建a.pyb/__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”。为什么?

4

1 回答 1

4

您刚刚删除b/__init__.py,但肯定有 ab/__init__.pyc并且您a.py仍在导入 b ( import b)。这可能导致解释器假设已经被字节编译,因为它看到b/__init__.pyc并接受它,这使得它打印相同的顺序。

请注意,此命令rm b/__init__.py只是删除了文件,而不是文件夹或.pyc. 这可能是原因。

尝试一下rm -r b,您的代码应该可以按预期工作。

这确实是 python 解释器的预期行为。如果您不希望解释器对文件进行字节编译,您可以使用 -B 参数调用它,但对于性能问题不建议这样做,因为字节编译的代码会使程序运行得更快

您可以在 docs 中阅读有关模块和字节编译文件和搜索路径的更多信息。

希望这可以帮助!

于 2013-05-24T17:16:27.620 回答