当我更改我的 Python 代码时,我经常需要删除关联的pyc文件,否则 Python 不会重新生成它并运行旧代码。有没有办法告诉 Python 不要生成pyc文件?
有时我通过指向特定模块运行 unittest make PYTHON_TEST=path_of_module_to_test test并且如果该模块path_of_module_to_test test导入了其他一些已更新的 python 模块,将从该模块导入的完成将从更新的 py 源文件或未更新的 pyc 文件中获取,或者导入导致更新依赖的 pyc 文件?
我正在寻找 pyc 文件格式规范。我发现这个链接提供了没有操作码的字节码指令,但我需要更多详细的文件,其中包括.pyc. 谁能给我一个链接?
在开发 Python Web 应用程序 (Flask/uWSGI) 并在我的本地机器上运行它时,*.pyc文件由解释器生成。我的理解是,这些编译后的文件可以使加载速度更快,但不一定运行得更快。
当我将这个相同的应用程序部署到生产环境时,它在一个对本地文件系统没有写权限的用户帐户下运行。没有*.pyc提交给源代码控制的文件,并且在部署期间无需努力生成它们。即使 Python 想.pyc在运行时写入文件,它也无法做到。
最近我开始怀疑这是否对应用程序的性能有任何切实的影响,无论是在流程开始后的第一次浏览量方面,还是在整个生命周期中始终如一。
我应该将 apython -m compileall作为部署脚本的一部分吗?
我希望能够仅发送文件,.pyc以便在发送的应用程序中实现轻量级/基本的混淆。
我尝试了命令行 -
python -m compileall -f C:\MOT_Server\olympus-skeleton\dist\olympus_server
Run Code Online (Sandbox Code Playgroud)
但所有py文件仍然保留。
我希望每个py文件都被pyc文件替换,而不是所有pyc文件都被转储到__pycache__文件夹中。
这可能是一个noobie问题,但......
所以我有一个我需要使用的pyc文件,但我没有任何文档.有没有办法找出其中的类和函数以及它们采取了哪些变量?我不需要编码,只需要如何运行它.
谢谢
似乎有时当我从git中取出旧的.pycrun而不是新的pull .py 文件时,有没有办法自动清除.pyc文件,所以它总是运行新版本?
我有一个python脚本试图在文件系统中的某个地方导入另一个脚本(路径只在运行时知道).根据我的理解,我需要使用imp模块,这可能会起作用,但是在加载模块时,我得到的错误是找不到导入模块使用的模块.
下面是代码:
importer.py:
import imp
imp.load_compiled("my_module","full_path_to_my_module\\my_module.pyc")
Run Code Online (Sandbox Code Playgroud)
my_module.py:
import sys
import another_module
Run Code Online (Sandbox Code Playgroud)
当我运行importer.py时,我收到htis错误消息:
ImportError:没有名为another_module的模块
这里出了什么问题?我怀疑当'importer.py'正在加载'my_module.pyc'时他也试图加载'another_module'(那很好)但是看错了地方(例如不是'full_path_to_my_module')
编辑: 我尝试将'full_path_to_my_module'添加到系统路径:
import imp
import sys
sys.path.append(full_path_to_my_module)
imp.load_compiled("my_module",full_path_to_my_module+my_module)
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误
也许我做了一些不必要的事情 - 这是我的目标:我希望能够在'importer.py'中使用'my_module.pyc'的所有功能.但'my_module.pyc'的位置作为'importer.py'的参数给出.
我想使用Python编译(.pyc或__pycache__)运行一个Pythonic项目。为了在Python2中做到这一点,我没有任何问题。
这是Python2项目中的简化示例:
项目树:
test2
??? main.py
??? subfolder
??? __init__.py
??? sub.py
Run Code Online (Sandbox Code Playgroud)编译:
python -m compileall test2
Run Code Online (Sandbox Code Playgroud)编译后的项目树:
test2
??? main.py
??? main.pyc
??? subfolder
??? __init__.py
??? __init__.pyc
??? sub.py
??? sub.pyc
Run Code Online (Sandbox Code Playgroud)如您所见,几个.pyc手动生成。现在,我可以正常运行该项目main.pyc,该项目与sub.py:有关系:
python main.pyc
Run Code Online (Sandbox Code Playgroud)
出:
Hi
Bye
Run Code Online (Sandbox Code Playgroud)main.py内容:
from subfolder import sub
print('Bye')
Run Code Online (Sandbox Code Playgroud)sub.py内容:
print('Hi')
Run Code Online (Sandbox Code Playgroud)现在,我想在Python3项目中重试此行为。
这是一个简化的asyncio(在Python3中可用)项目:
项目树:
test3
??? main.py
??? subfolder
??? __init__.py
??? …Run Code Online (Sandbox Code Playgroud)我使用 IronPython 2.7 和 WPF 使用 VS2017 开发了一个应用程序,使用 ipy 命令可以正常工作。我想从项目创建一个 exe 文件,所以我在 cmd 中使用了以下命令:
ipy pyc.py /main:IronPython5.py /target:winexe
Run Code Online (Sandbox Code Playgroud)
项目的哪个 XAML 文件(包括所有相关 DLL)位于部署文件夹中,但是,我收到以下错误,我无法理解其含义:
Traceback (most recent call last):
File "pyc.py", line 332, in <module>
File "pyc.py", line 327, in Main
File "pyc.py", line 181, in GenerateExe
SystemError: Ambiguous match found.
Run Code Online (Sandbox Code Playgroud)
Ironpython5.py 包含:
import wpf
from System.Windows import MessageBox
from System.Windows import Application, Window
class MyWindow(Window):
def __init__(self):
self.str1 = ""
wpf.LoadComponent(self, 'IronPython5.xaml')
def Button_Click(self, sender, e):
if self.str1 == "":
MessageBox.Show("msg1") …Run Code Online (Sandbox Code Playgroud) pyc ×10
python ×10
.net ×1
bytecode ×1
compilation ×1
compiled ×1
cpython ×1
deployment ×1
import ×1
ironpython ×1
python-2.7 ×1
python-3.x ×1
wpf ×1