来自Python书籍:
学习Python. 第5版, 第727页
我读到了以下内容:
如果Python在搜索路径上只找到一个字节码文件而没有源代码,它会直接加载该字节码;这意味着你可以仅发送字节码文件作为程序并避免发送源代码。
但是,在Python 3.5上尝试相同的操作时,它无法工作:
~/Python/Module_Test$ cat a.py
a = "abc"
l = [1,2,3]
导入模块'a'
会创建以下字节码文件:
~/Python/Module_Test/__pycache__$ ls
a.cpython-35.pyc
现在我已经删除了 'a.py'
文件,并且从字节码目录中导入模块 'a'
:
~/Python/Module_Test/__pycache__$ python
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul 2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'a'
我甚至尝试将字节码目录添加到搜索路径中,但仍无法加载该模块:
>>> import sys
>>> sys.path.append('/home/pradeep/Python/Module_Test/__pycache__')
>>> import a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'a'
我做错了什么?我们能否从字节码中导入模块而不需要源代码?我的理解是否有误?
pradeep@ubuntu:~/Python/Module_Test$ ls pycache/
a.cpython-34.pyc a.cpython-35.pyc - Pradeep