Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从.py文件手动生成.pyc文件_Python - Fatal编程技术网

Python 如何从.py文件手动生成.pyc文件

Python 如何从.py文件手动生成.pyc文件,python,Python,出于某种原因,我不能依靠Python的“import”语句自动生成.pyc文件 有没有办法实现以下功能 def py_to_pyc(py_filepath, pyc_filepath): ... 我上次使用Python已经有一段时间了,但我相信您可以使用: 我会用。它在脚本和命令行中都能很好地工作。它比前面提到的内部使用的模块/工具稍微高一点。您可以在终端中使用compileall。下面的命令将递归地进入子目录,并为它找到的所有python文件生成pyc文件。该模块是python标准库

出于某种原因,我不能依靠Python的“import”语句自动生成.pyc文件

有没有办法实现以下功能

def py_to_pyc(py_filepath, pyc_filepath):
    ...

我上次使用Python已经有一段时间了,但我相信您可以使用:


我会用。它在脚本和命令行中都能很好地工作。它比前面提到的内部使用的模块/工具稍微高一点。

您可以在终端中使用
compileall
。下面的命令将递归地进入子目录,并为它找到的所有python文件生成pyc文件。该模块是python标准库的一部分,因此您不需要安装任何额外的东西来使用它。这与python2和python3的工作方式完全相同

python -m compileall .

您可以使用以下命令行编译单个文件:

python -m compileall <file_1>.py <file_n>.py
python-m compileall.py.py
我找到了几种将python脚本编译成字节码的方法

  • 在终端中使用
    py\u编译

    python -m py_compile File1.py File2.py File3.py ...
    
    -m
    指定要编译的模块名称

    或者,用于交互式编译文件

    python -m py_compile -
    File1.py
    File2.py
    File3.py
       .
       .
       .
    
  • 使用
    py\u compile.compile

    import py_compile
    py_compile.compile('YourFileName.py')
    
    import compileall
    compileall.compile_file('YourFileName.py')
    
  • 使用
    py\u compile.main()

    它一次编译几个文件

    import py_compile
    py_compile.main(['File1.py','File2.py','File3.py'])
    
    列表可以根据您的意愿增长。或者,您也可以在主文件中传递文件列表,甚至在命令行参数中传递文件名

    或者,如果您在main中传递
    ['-']
    ,则它可以交互编译文件

  • 使用
    compileall.compile\u dir()

    它编译所提供目录中的每个Python文件

  • 使用
    compileall.compile\u file()

  • 请查看以下链接:


    要匹配原始问题要求(源路径和目标路径),代码应如下所示:

    import py_compile
    py_compile.compile(py_filepath, pyc_filepath)
    
    如果输入代码有错误,则会引发py_compile.pycompileerError异常。

    在python2中,您可以使用: 它将所有
    .py
    文件编译到包含包和模块的项目中的
    文件夹中

    或与勃朗宁来自:

    您可以在文件夹中强制执行与中相同的
    .pyc
    文件布局 Python2通过使用:

    python3-m compileall-b

    选项
    -b
    触发将
    .pyc
    文件输出到其 遗留位置(即与Python2中相同)

    有两种方法可以做到这一点
  • 命令行
  • 使用python程序
  • 如果您使用的是命令行,请使用将python代码编译为python二进制代码。 例如:
    python-m compileall-x./*

    或, 您可以使用此代码将库编译为字节码:

    import compilell
    导入操作系统
    lib\u path=“您的lib\u路径”
    build\u path=“your-dest\u path”
    compileall.compile\u dir(lib\u路径,force=True,legacy=True)
    def MOVETONEWLLOCATION(cu_路径):
    对于os.listdir(cu_路径)中的文件:
    如果os.path.isdir(os.path.join(cu_path,file)):
    编译(os.path.join(cu_路径,文件))
    elif file.endswith(“.pyc”):
    dest=os.path.join(构建路径、cu路径、文件)
    os.makedirs(os.path.dirname(dest),exist\u ok=True)
    重命名(os.path.join(cu_路径,文件),dest)
    moveToNewLocation(lib_路径)
    
    查看详细文档

  • 在文件目录中创建一个新的python文件
  • 键入
    import(不带扩展名的文件名)
  • 运行文件
  • 打开目录,然后找到pycache文件夹
  • 里面应该是你的.pyc文件

  • 您可能希望包含第二个参数,该参数确定输出文件。否则,它默认为
    \uuuupycache\uuuu/file.cpython-32.pyc
    之类的值,并将其作为返回值。这应该是可以接受的答案——至少在我需要将所有*.py编译为*.pyc:recursively:)是否可以分发包含所有使用的库的pyc文件?所以用户不必安装它们,只需运行PYC文件,我知道在java中使用JARs是可能的。Python有类似的方法吗?我还听说了一些关于Python中的元文件的内容。这个编译器也会建立一些缓存吗?如果没有,该命令是什么??因为最终用户没有对lib目录的写入权限。我想加快这里的速度。。。另外,请看一看字节码(.pyo文件iso.pyc)编译的
    -O
    标志。反编译如何?请小心使用此命令。我不小心在我的site packages文件夹中做了一个
    compileall
    ,它把一切都搞砸了
    compileall
    不包括跳过相应的
    .pyc
    文件已经是最新的文件的逻辑,是吗?@KyleStrand
    compileall
    会跳过已经是最新的
    .pyc
    (使用Python 2.7.11进行测试)@同名有趣。不知道我为什么会这么想。谢谢检查。一个小的更正是,您正在加载的模块名是
    py_compile
    compileall
    而不是
    py_compile.py
    compileall.py
    。换句话说,它应该是
    python3-m py_compile PYTHON\u FILENAME
    python3-m编译所有PYTHON文件目录
    import compileall
    compileall.compile_file('YourFileName.py')
    
    import py_compile
    py_compile.compile(py_filepath, pyc_filepath)
    
    python -m compileall <pythonic-project-name>
    
    python3 -m compileall <pythonic-project-name>