ด้วยเหตุผลบางอย่างฉันไม่สามารถพึ่งพาคำสั่ง "นำเข้า" ของ Python เพื่อสร้างไฟล์. pyc โดยอัตโนมัติ
มีวิธีการใช้ฟังก์ชั่นดังต่อไปนี้หรือไม่?
def py_to_pyc(py_filepath, pyc_filepath):
...
ด้วยเหตุผลบางอย่างฉันไม่สามารถพึ่งพาคำสั่ง "นำเข้า" ของ Python เพื่อสร้างไฟล์. pyc โดยอัตโนมัติ
มีวิธีการใช้ฟังก์ชั่นดังต่อไปนี้หรือไม่?
def py_to_pyc(py_filepath, pyc_filepath):
...
คำตอบ:
คุณสามารถใช้compileallในอาคารผู้โดยสาร คำสั่งต่อไปนี้จะไปซ้ำในไดเรกทอรีย่อยและทำไฟล์ pyc สำหรับไฟล์หลามทั้งหมดที่พบ compileallโมดูลเป็นส่วนหนึ่งของห้องสมุดมาตรฐานหลามดังนั้นคุณจึงไม่จำเป็นต้องติดตั้งพิเศษอะไรที่จะใช้มัน วิธีนี้ใช้ได้ผลเหมือนกับ python2 และ python3
python -m compileall .
-Oธงสำหรับการรวบรวม bytecode (.pyo ไฟล์ iso .pyc)
compileallในโฟลเดอร์แพ็คเกจเว็บไซต์ของฉันและมันทำให้ทุกอย่างยุ่งเหยิง
คุณสามารถรวบรวมไฟล์แต่ละไฟล์จากบรรทัดคำสั่งด้วย:
python -m compileall <file_1>.py <file_n>.py
เป็นเวลานานแล้วที่ฉันใช้ Python ครั้งล่าสุด แต่ฉันเชื่อว่าคุณสามารถใช้py_compile:
import py_compile
py_compile.compile("file.py")
__pycache__/file.cpython-32.pycและคุณจะได้รับเป็นค่าตอบแทน
ฉันพบหลายวิธีในการรวบรวมสคริปต์ไพ ธ อนลงใน bytecode
ใช้py_compileใน terminal:
python -m py_compile File1.py File2.py File3.py ...
-m ระบุชื่อโมดูลที่จะรวบรวม
หรือสำหรับการรวบรวมไฟล์แบบโต้ตอบ
python -m py_compile -
File1.py
File2.py
File3.py
.
.
.การใช้py_compile.compile:
import py_compile
py_compile.compile('YourFileName.py')การใช้py_compile.main():
มันรวบรวมไฟล์หลายไฟล์ในเวลาเดียวกัน
import py_compile
py_compile.main(['File1.py','File2.py','File3.py'])
รายการสามารถเติบโตได้นานเท่าที่คุณต้องการ หรือคุณสามารถส่งรายการไฟล์ในชื่อไฟล์หลักหรือชื่อไฟล์ในบรรทัดคำสั่งได้
หรือถ้าคุณผ่าน['-']หลักก็สามารถรวบรวมไฟล์แบบโต้ตอบ
การใช้compileall.compile_dir():
import compileall
compileall.compile_dir(direname)
มันรวบรวมไฟล์ Python ทุกไฟล์ที่มีอยู่ในไดเรกทอรีที่ให้มา
การใช้compileall.compile_file():
import compileall
compileall.compile_file('YourFileName.py')ดูลิงค์ด้านล่าง:
py_compileและcompileallไม่ได้หรือpy_compile.py compileall.pyในคำอื่น ๆ ที่ควรจะเป็นหรือpython3 -m py_compile PYTHON_FILENAME python3 -m compileall PYTHON_FILES_DIRECTORY
ฉันจะใช้คอมไพล์ทั้งหมด มันทำงานได้ดีทั้งจากสคริปต์และจากบรรทัดคำสั่ง มันเป็นโมดูล / เครื่องมือระดับที่สูงขึ้นเล็กน้อยกว่าpy_compile ที่กล่าวถึงแล้วว่ามันยังใช้ภายใน
compileallไม่ได้รวมตรรกะในการข้ามไฟล์ที่มีไฟล์ที่เกี่ยวข้อง.pycเป็นปัจจุบันอยู่ใช่ไหม?
compileallทำการข้ามไฟล์ที่มีข้อมูลล่าสุดแล้ว.pyc(ทดสอบด้วย Python 2.7.11)
python -m compileall <pythonic-project-name>
ซึ่งทำให้คอมไพล์ทั้งหมด.pyถึง.pycในโครงการซึ่งมีโฟลเดอร์ย่อย
python3 -m compileall <pythonic-project-name>
ซึ่งทำให้รวบรวมทั้งหมด.pyไปยัง__pycache__โฟลเดอร์ในโครงการที่มีโฟลเดอร์ย่อย
หรือด้วยสีน้ำตาลจากโพสต์นี้ :
คุณสามารถบังคับใช้เค้าโครง
.pycไฟล์เดียวกันในโฟลเดอร์เช่นเดียวกับใน Python2 โดยใช้:
python3 -m compileall -b <pythonic-project-name>ตัวเลือกนี้
-bจะทริกเกอร์เอาท์พุทของ.pycไฟล์ไปยังตำแหน่งดั้งเดิม (เช่นเดียวกับใน Python2)
เพื่อให้ตรงกับความต้องการของคำถามดั้งเดิม (เส้นทางที่มาและเส้นทางปลายทาง) รหัสควรเป็นเช่นนั้น:
import py_compile
py_compile.compile(py_filepath, pyc_filepath)
หากรหัสอินพุตมีข้อผิดพลาดจะมีการยกข้อยกเว้นpy_compile.PyCompileError
หากคุณกำลังใช้บรรทัดคำสั่งใช้python -m compileall <argument>เพื่อรวบรวมรหัสหลามเพื่อรหัสหลามไบนารี Ex:python -m compileall -x ./*
หรือ คุณสามารถใช้รหัสนี้เพื่อรวบรวมห้องสมุดของคุณเป็นรหัสไบต์
import compileall
import os
lib_path = "your_lib_path"
build_path = "your-dest_path"
compileall.compile_dir(lib_path, force=True, legacy=True)
def compile(cu_path):
for file in os.listdir(cu_path):
if os.path.isdir(os.path.join(cu_path, file)):
compile(os.path.join(cu_path, file))
elif file.endswith(".pyc"):
dest = os.path.join(build_path, cu_path ,file)
os.makedirs(os.path.dirname(dest), exist_ok=True)
os.rename(os.path.join(cu_path, file), dest)
compile(lib_path)
ดูที่☞ docs.python.orgเพื่อดูเอกสารโดยละเอียด