在单独的文件夹中编译python文件的方法?

Eva*_*ark 28 python compiled file

是否可以让Python将.pyc文件保存到单独的文件夹位置sys.path

/code
    foo.py
    foo.pyc
    bar.py
    bar.pyc
Run Code Online (Sandbox Code Playgroud)

至:

/code
   foo.py
   bar.py
/code_compiled
   foo.pyc
   bar.pyc
Run Code Online (Sandbox Code Playgroud)

我想这样,因为我觉得它更有条理.感谢你给与我的帮助.

jfs*_*jfs 17

PEP 304:控制字节码文件的生成.它的状态是Withdrawn和相应的补丁被拒绝.因此,可能没有直接的方法来做到这一点.

如果您不需要源代码,那么您可能只是删除*.py文件.*.pyc文件可以原样使用或包装在鸡蛋中.

  • 更新:[PYC存储库目录](http://www.python.org/dev/peps/pep-3147/) (3认同)

Cha*_*iam 17

在2003年的黑暗和古代,PEP 304出现了挑战这个问题.它的补丁被发现缺乏.环境变量平台依赖性和版本偏斜将其撕成了碎片,并将其碎片分散在荒地上.

在经历了多年的痛苦之后,2009年的最后几天,一位新的挑战者崛起.巴里华沙召唤了PEP 3147并派它去做战斗,挥舞着一种技巧简单的武器.PEP粉碎了混乱的PYC文件,让那些试图争辩其PYC文件的Waring Unladen Swallow和CPython解释员沉默,并允许Python轻松休息,其死鬼偶尔在深夜运行.PEP 3147被独裁者认定是值得的,并且在3.2时代被授予官方角色.

从3.2开始,Python将模块的PYC文件存储在__pycache__模块目录下.每个PYC文件包含解释器的名称和版本,例如__pycache__/foo.cpython-33.pyc.您可能还有__pycache__/foo.cpython-32.pyc早期版本的Python编译.正确的魔法发生:如果与源代码不同步,则使用正确的魔法并重新编译.在运行时,查看模块的mymodule.__cached__pyc文件名并解析它imp.get_tag().有关详细信息,请参阅"新增功能"部分.

TL; DR - 只适用于Python 3.2及更高版本.可怜的黑客在此之前替代了版本.

  • PEP 3147仅是部分解决方案.`__pycache__`目录仍然是凌乱的源代码.使用pycs的主要烦恼是`svn switch`之后未删除的目录. (3认同)
  • *随着新王国的兴起,旧王国的王国垂涎新土地的宝藏.类装饰器,整数除法和打印函数的许多raid都获得了胜利.只有当农民开始带回旧土壤的推土机时,才决定迁移.* (2认同)

Rob*_*rtT 7

仅在将近十年之后,Python 3.8 终于通过设置环境变量PYTHONPYCACHEPREFIX或使用-X pycache_prefix=PATH参数(官方文档在这里)提供支持将字节码保存在单独的并行文件系统树中。


Mal*_*eev 6

如果您愿意为此牺牲字节码生成,可以使用命令行标志:

python -B file_that_imports_others.py
Run Code Online (Sandbox Code Playgroud)

可以放入 IDE 的构建/运行首选项中