【发布时间】:2018-12-24 23:24:37
【问题描述】:
我想使用 Python 编译(.pyc 或 __pycache__)运行 Pythonic 项目。为了在Python2中做到这一点,我没有任何问题。
这是 Python2 项目中的一个简化示例:
-
项目树:
test2 ├── main.py └── subfolder ├── __init__.py └── sub.py -
编译:
python -m compileall test2 -
编译后的项目树:
test2 ├── main.py ├── main.pyc └── subfolder ├── __init__.py ├── __init__.pyc ├── sub.py └── sub.pyc -
如您所见,手动生成了几个
.pyc。现在我可以使用main.pyc运行这个项目,它与sub.py有关系:python main.pyc输出:
Hi Bye -
main.py 内容:
from subfolder import sub print('Bye') -
sub.py 内容:
print('Hi')
现在我想在 Python3 项目中重试此行为。
这是一个简化的asyncio(在Python3中可用)项目:
-
项目树:
test3 ├── main.py └── subfolder ├── __init__.py └── sub.py -
编译:
python3 -m compileall test3 -
编译后的项目树:
test3 ├── main.py ├── __pycache__ │ └── main.cpython-36.pyc └── subfolder ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-36.pyc │ └── sub.cpython-36.pyc └── sub.py -
如您所见,
__pycache__文件夹是手动生成的。但是我不能使用与subfolder有关系的main.cpython-36.pyc运行这个项目:cd test3/__pycache__ python3 main.cpython-36.pycOut(我预计会产生
Hi Bye消息):Traceback (most recent call last): File "test3/main.py", line 2, in <module> ModuleNotFoundError: No module named 'subfolder' -
main.py 内容:
import asyncio from subfolder import sub async def myCoroutine(): print("Bye") def main(): loop = asyncio.get_event_loop() loop.run_until_complete(myCoroutine()) loop.close() main() -
sub.py 内容:
print('Hi')
问题:
如何使用__pycache__ 文件夹运行这个项目(在Python3 项目之上)?
或者
如何使用 python 编译运行具有子文件夹之间关系的 Python3 项目?
[注意]:
由于
asyncio方法,我无法在上述Python3项目中使用python compileall(Python2 编译)。我的 Python(s) 版本是 Python2.7 和 Python3.6
【问题讨论】:
标签: python python-3.x compilation cpython pyc