如何使用__pycache__文件夹运行Python项目?

Ben*_*ari 3 python cpython compilation pyc python-3.x

我想使用Python编译(.pyc或__pycache__)运行一个Pythonic项目。为了在Python2中做到这一点,我没有任何问题。


这是Python2项目中的简化示例:


现在,我想在Python3项目中重试此行为。

这是一个简化的asyncio(在Python3中可用)项目:


题:

如何使用文件夹运行该项目(高于Python3项目)__pycache__?

要么

如何使用python编译来运行具有子文件夹之间关系的Python3项目?


[ 注意 ]:

  • 由于该方法,我无法在上述项目中使用python compileall(Python2编译)。Python3asyncio

  • 我的Python版本是Python2.7和Python3.6

ead*_*ead 6

您可以使用以下命令在文件夹中强制使用与pyc2相同的pyc文件布局:

python3 -m compileall -b test3
Run Code Online (Sandbox Code Playgroud)

该选项-b将pyc-files 的输出触发到其旧位置(即与Python2中的相同)。

之后,您可以通过以下方式再次使用编译后的缓存:

python3 main.pyc
Run Code Online (Sandbox Code Playgroud)

从PEP-3147开始,模块的加载方式一直存在,因此无法__pycache__按照您希望的方式使用文件夹中的pyc文件:如果没有*.py-file,__pycache__则永远不会查找的内容。这是工作流程中最重要的部分:

   import foo
     |
     |
     -- >  [foo.py exists?]  --- NO ----> [foo.pyc exists?]  -- NO --> [ImportError] 
            |                                     |
            |                                    YES
           YES                                    |--> [load foo.pyc]
            |
            |-> [look up in __pycache__]
Run Code Online (Sandbox Code Playgroud)

这意味着,__pycache__只有在*.py可以找到对应的-file 时,才查找from 中的文件。