我刚刚对此进行了测试,它在 10.8.2 和 Apple 安装的 Python 2.7 上运行良好。
$ echo -e 'import bar\n' > foo.py
$ echo -e 'pass\n' > bar.py
$ export PYTHONDONTWRITEBYTECODE=1
$ python foo.py
$ ls -l bar.py*
-rw-r--r-- 1 abarnert staff 6 Dec 14 17:25 bar.py
$ unset PYTHONDONTWRITEBYTECODE
$ python foo.py
$ ls -l bar.py*
-rw-r--r-- 1 abarnert staff 6 Dec 14 17:25 bar.py
-rw-r--r-- 1 abarnert staff 118 Dec 14 17:26 bar.pyc
您可以将python 替换为python2.7、python2.6 或python2.5,您将得到相同的结果。
它还适用于 Apple 安装的 10.5-10.7 的所有 Python,以及我在可用的各种机器上的所有 python.org、Enthought、MacPorts 和 Homebrew Python,以及标准 python两个不同的 Linux 发行版上的软件包。
所以如果这个是一个错误,它是一个非常具体的错误,这意味着你必须准确地告诉我们哪个 Python(以及你如何安装它,如果没有库存),以及哪个 OS X 10.8.
PYTHONDONTWRITEBYTECODE 更有可能不在 python 的环境中。正如 Mark Ransom 所建议的,您可以通过添加以下内容来验证这一点:
import os
print 'PYTHONDONTWRITEBYTECODE is', os.environ.get('PYTHONDONTWRITEBYTECODE', None)
如果它显示None,那就是问题所在。
所以,PYTHONDONTWRITEBYTECODE 不在您的环境中。但是你说它是在你的调用环境中。这怎么可能?好吧,如果您使用的是bash,最可能的原因是您忘记了export。在所有愚蠢的方法中,这是我做得最多的一种。但这里有一些我做过的愚蠢的事情:
- 忘记
export。你可以echo $PYTHONDONTWRITEBYTECODE你想要的,它已经明确设置了,但是python没有看到它……
- 记住
export,但忘记设置它。 bash 让您 export PYTHONDONTWRITEBYTECODE 即使它没有定义任何东西。
-
export $PYTHONDONTWRITEBYTECODE。 (您可以通过将其设置为无效标识符来避免这种情况,例如 1。)
- 请记住
export,但 export 错误的变量(通常是不小心误用历史记录以试图保存一些击键)。
- 错字。不管你盯着
PYTHONDOTWRITEBYTECODE看多少次,它看起来都很好……
- 在终端中进行一些设置,切换到另一个窗口,回到错误的终端窗口,然后运行
python。
- 编辑
~/.bash_profile,而不是重新加载它或启动一个新的shell,想象“我会直接做同样的事情”,然后打一些愚蠢的错字,然后花半个小时看我的@ 987654345@ 看看我做错了什么,然后再考虑查看我的 shell 历史记录。
- 使用
subprocess/os.exec*/whatever 从另一个 Python 脚本启动一个 Python 脚本,特意要求一个干净的环境,然后想知道为什么我的环境变量没有显示。
- 使用
execl 而不是execle 从C 启动Python,因此您想要的envp 参数无效。 (在某些平台上,这可能会出现段错误,但 x86/x64 OS X 不会。)
无论如何,如果您在终端中手动尝试过,请再试一次。
如果您在 .bash_profile、启动器 shell 脚本、启动器 Python 脚本或其他任何内容中执行此操作,请向我们展示相关代码,有人会立即发现您的愚蠢错误。如果他们嘲笑你,告诉他们阅读我的回答,这样他们就可以嘲笑我了。
PS,请注意,我在测试中使用了 export PYTHONDONTWRITEBYTECODE=1 而不是单独的 PYTHONDONTWRITEBYTECODE=1 和 export PYTHONDONTWRITEBYTECODE 行。我总是这样做,除了必须是可移植的 shell 脚本,因为调试在没有直接导出语法的老式 shell 上尝试这个时得到的明显错误比调试由我在上面列出的所有愚蠢错误。