ฉันปรับใช้โมดูล

คำอธิบายของโมดูล API ระดับสูงในโครงการ AlexBerUtils

ใช้โมดูลนี้parsers, ymlparsers, init_app_confที่เป็นระดับต่ำ API init_app_conf การใช้งานมี จำกัด

รหัสที่มาที่คุณสามารถพบได้ที่นี่ สามารถใช้ได้เป็นส่วนหนึ่งของโครงการAlexBerUtilsของฉัน

คุณสามารถติดตั้ง AlexBerUtils จาก PyPi:

python3 -m pip install -U alex-ber-utils

python3 -m pip install alex-ber-utils[fabric]
python3 -m pip install alex-ber-utils[yml]

ดูที่นี่สำหรับคำอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการติดตั้ง

ตัวอย่างโค้ด

นี่เป็นทางเลือกง่ายๆสำหรับการนำโค้ดของคุณไปใช้งานจริง

ตัวอย่างโค้ดนี้โดยทั่วไปทำสิ่งต่อไปนี้:

  • มันเปลี่ยนconfig.xmlไฟล์ด้วยโปรไฟล์ของเครื่องระยะไกลที่มาจากระบบ ดูรายละเอียดด้านล่าง
  • มันเก็บถาวรในไฟล์ zip ไฟล์ทั้งหมดจากไดเร็กทอรีปัจจุบัน (มีข้อยกเว้นบางประการ)
  • อัปโหลดไฟล์นี้โดยใช้Fabricไปยังเครื่องระยะไกล
  • เปิดไฟล์เก็บถาวรและลบไฟล์ zip เอง
  • ทำการกำหนดค่าอื่น ๆ บนเครื่องระยะไกล (สร้างซอฟต์ลิงค์เพื่อบันทึก dir สร้างไดเรกทอรีบันทึกหากไม่มีอยู่ ฯลฯ )

หมายเหตุ:ไม่จำเป็นต้องใช้.envไฟล์ด้านบนอย่างเคร่งครัดแต่สะดวก นอกจากนี้ยังมีข้อมูลที่ละเอียดอ่อนบางอย่าง (เช่นเส้นทางสู่คีย์) นอกจากนี้พารามิเตอร์บางตัวอาจแตกต่างกันไปในเครื่องต่างๆดังนั้นการใช้สภาพแวดล้อมของระบบจึงเป็นทางออกที่สะดวก

บรรทัดที่ 1–6 การนำเข้าทั่วไป

On line ที่ 8 ผมนำเข้าfixabscwd () และfix_retry_env ()ฟังก์ชั่น ดูการทำเส้นทางเทียบกับไฟล์ในการทำงานและเส้นทางที่ทำลงในไฟล์งานบน Windows บน Linux

ในบรรทัดที่ 9 ฉันกำลังนำเข้าฟังก์ชัน load_dotenv ()เพื่อแยกวิเคราะห์.envไฟล์ ดูหมายเหตุด้านบน

ในบรรทัดที่ 12 ฉันกำลังนำเข้าการเชื่อมต่อจากโมดูลfabsของฉัน โดยทั่วไปมันConnection มาจากfabricโมดูลเสริมด้วยวิธีcp () ดูรายละเอียดเพิ่มเติมด้านล่าง

ในบรรทัดที่ 13 ฉันกำลังนำเข้าโมดูลymlparsers มันจะถูกใช้โดยตรงในสคริปต์และจะถูกใช้โดยอ้อมอย่างมาก ดูรายละเอียดของโมดูลระดับต่ำ API สำหรับโมดูลอื่น

ในบรรทัดที่ 14 ฉันกำลังนำเข้าโมดูลinit_app_conf ใช้โดยทางอ้อมในการปรับใช้โมดูล ดูรายละเอียดโมดูล init_app_conf หลักของฉัน

ในบรรทัดที่ 15 ฉันกำลังนำเข้าบางส่วนของสคริปต์ที่ใช้ซ้ำได้จากการปรับใช้โมดูล

ในบรรทัดที่ 17 มีค่าคงที่กับชื่อไดเร็กทอรีปัจจุบัน

ในบรรทัดที่ 18 ค่าคงที่โดยมีชื่อไดเร็กทอรีปัจจุบันเป็นตัวพิมพ์ใหญ่

ในบรรทัดที่ 21–24 มีค่าคงที่สำหรับคีย์ของตัวแปรสภาพแวดล้อม

หมายเหตุ:คุณสามารถมีหลายสคริปต์เพื่อปรับใช้ดังนั้นคุณต้องมีวิธีในการแยกความแตกต่างของตัวแปรระบบ เพียงแค่เปลี่ยนชื่อ constrant ด้านบนและ.envไฟล์สำหรับสคริปต์ใหม่

ในบรรทัดที่ 27 เรามีฟังก์ชันrun ()ที่มีสคริปต์การปรับใช้จริง เพิ่มเติมด้านล่างนี้

ในบรรทัดที่ 74 เรามีฟังก์ชันmain ()ที่รับพารามิเตอร์ args ที่เป็นทางเลือก มีค่าเริ่มต้นไม่มี หากไม่มีการส่งผ่านค่าที่ชัดเจนเกินกว่าจะใช้sys.argsโดยปริยาย ฟังก์ชันนี้สามารถเรียกใช้จากโมดูลอื่นได้

ในบรรทัด 93–94 - ข้อมูลโค้ดมาตรฐาน: หากโมดูลนี้เรียกใช้งานเป็น__main__ (และไม่ได้นำเข้าสู่โมดูลอื่น) หลังจากวิธีการทั้งหมดและแอตทริบิวต์ระดับโมดูล (ส่วนกลาง) จะถูกกำหนดเราจะเรียกฟังก์ชันmain ()

เมื่อรหัสนี้ถูกเรียกใช้งานหลังจากกำหนดวิธีการทั้งหมดและแอตทริบิวต์ระดับโมดูล (ส่วนกลาง) แล้วฟังก์ชันmain ()จะถูกเรียกด้วย args = None

ในบรรทัดที่ 75–78 ฉันกำลังทำการเริ่มต้นคนตัดไม้เมื่อบันทึกทั้งหมดที่มีระดับ INFO ขึ้นไปถูกเปลี่ยนเส้นทางไปที่ stderr คำเตือนทั้งหมดจะเปลี่ยนเส้นทางไปที่ stderr

ในบรรทัดที่ 80–81 ฉันกำลังโหลดการกำหนดค่าจาก.envไฟล์ตอนนี้พร้อมใช้งานแล้วos.environ.

ในบรรทัดที่ 83 ฉันกำลัง "แก้ไข" เส้นทางแบบเต็มของ Windows บน Posix ทำให้ใช้งานได้

เส้น 85-86 มีการแจ้งเตือนว่าภายใต้ฝากระโปรงymlparsers และinit_app_conf ถูกนำมาใช้ ถ้าฉันต้องการปรับแต่งพฤติกรรมของพวกเขาฉันควรเรียกใช้วิธีการinitConfig () ที่เหมาะสม ดูรายละเอียดของโมดูล API ระดับต่ำอีกโมดูลและโมดูล init_app_con สำคัญของฉัน หมายเหตุinit_app_confการใช้งานมี จำกัด ดังนั้นความสามารถในการเปลี่ยนแปลงพฤติกรรมจึงมี จำกัด

ในบรรทัดที่ 88 เรากำลังเรียกใช้ฟังก์ชัน ก็จะส่งกลับของไฟล์และเนื้อหาเป็น(ดูคำอธิบายรายละเอียดด้านล่าง)load_config() full_pathconfig.ymldict

ในบรรทัดที่ 89 เรากำลังเรียกใช้ฟังก์ชันrun ()ด้วยfull_pathและcontentparams

ในบรรทัดที่ 28–33 เรากำลังดึงพารามิเตอร์จากอาร์กิวเมนต์ของฟังก์ชันและ os.environ.

On line ที่ 41 เรากำลังใช้เลือกใช้โมดูลsplit_path ()ฟังก์ชั่นที่จะได้รับroot_folder ที่ลงท้ายด้วยชื่อไดเรกทอรีปัจจุบันและrelative_part_pathจากสถานที่ตั้งของconfig.ymlไฟล์ ดูด้านล่าง

ในบรรทัดที่ 44-51 เรากำลังสร้างไดเร็กทอรีชั่วคราวที่จะมีไฟล์เก็บถาวรที่มีไฟล์ทั้งหมด (พร้อมข้อยกเว้น) จากไดเร็กทอรีปัจจุบันซึ่งเราจะคัดลอกไปยังเครื่องระยะไกล

ในบรรทัดที่ 54–60 เรากำลังใช้shutil.copytree()ฟังก์ชันเพื่อเพิ่มไฟล์ทั้งหมดลงในไฟล์ zip

ในบรรทัดที่ 54 เรากำลังส่งพารามิเตอร์ที่เราต้องการคัดลอกไฟล์ทั้งหมดซ้ำ ๆ (โดยมีข้อยกเว้นบางประการ) จากroot_folderไปยังไดเร็กทอรีชั่วคราว

ignore param มีข้อยกเว้นดังต่อไปนี้:

  • __pycache__:ไฟล์นี้สร้างโดย Python Runtime อาจแตกต่างกันเนื่องจาก Python เวอร์ชันที่แตกต่างกันที่ติดตั้งในเครื่องและจากระยะไกลหรือเนื่องจากมีการใช้ระบบปฏิบัติการที่แตกต่างกัน (เช่น Windows / Mac ภายในเครื่อง Linux จากระยะไกล)
  • venv:ไดเร็กทอรีมีสภาพแวดล้อมเสมือนของ Python ขึ้นอยู่กับเวอร์ชัน Python ที่แน่นอนอีกครั้ง
  • logs:บันทึกที่สร้างขึ้นภายในเครื่องไม่มีค่าที่จะคัดลอกไปยังเครื่องระยะไกล
  • *.pyc:ไฟล์ Python ที่คอมไพล์แล้ว ขึ้นอยู่กับเวอร์ชัน Python ที่แน่นอนอีกครั้ง
  • tmp*:ไฟล์ชั่วคราวที่สร้างโดย Python พวกเขาควรละเว้น
  • .*:ไฟล์ที่ซ่อนอยู่ทั้งหมดรวมถึง.env - มีข้อมูลที่ละเอียดอ่อนซึ่งเราไม่ต้องการเผยแพร่ออกไป โดยทั่วไปคุณไม่ต้องการแจกจ่ายไฟล์ที่ซ่อนอยู่ แน่นอนคุณสามารถเปลี่ยนสิ่งนี้ได้หากในกรณีของคุณแตกต่างกัน
  • config.yml: ต้องการจัดการกับโปรไฟล์ของมัน (ดูด้านล่าง)

อาร์กิวเมนต์ copy_function ที่เป็นทางเลือกคือ callable ที่จะใช้เพื่อคัดลอกแต่ละไฟล์ จะถูกเรียกโดยมีเส้นทางต้นทางและเส้นทางปลายทางเป็นอาร์กิวเมนต์ โดยค่าเริ่มต้นจะใช้ copy2 () แต่สามารถใช้ฟังก์ชันใด ๆ ที่รองรับลายเซ็นเดียวกัน (เช่น copy ()) ได้

เรากำลังส่งผ่านฟังก์ชันที่ใช้ซ้ำได้add_to_zip_copy_function () เพื่อเพิ่มไฟล์ไปยัง zip จากโมดูลปรับใช้ของฉัน ดูรายละเอียดเพิ่มเติมด้านล่าง

symlinks พารามิเตอร์เป็น True

ignore_dangling_symlinks พารามิเตอร์เป็น True

อ้างจากเอกสารของฟังก์ชัน copytree () :

หากแฟล็ก symlinks ที่เป็นทางเลือกเป็นจริงลิงก์สัญลักษณ์ในแผนผังต้นทางจะส่งผลให้ลิงก์สัญลักษณ์ในทรีปลายทาง หากเป็นเท็จเนื้อหาของไฟล์ที่ชี้ไปโดยลิงก์สัญลักษณ์จะถูกคัดลอก หากไม่มีไฟล์ที่ชี้โดย symlink จะมีการเพิ่มข้อยกเว้นในรายการข้อผิดพลาดที่เกิดขึ้นในข้อยกเว้นข้อผิดพลาดในตอนท้ายของกระบวนการคัดลอก

คุณสามารถตั้งค่าแฟล็ก Ignore_dangling_symlinks ที่เป็นทางเลือกเป็น true หากคุณต้องการปิดเสียงข้อยกเว้นนี้ โปรดสังเกตว่าสิ่งนี้ไม่มีผลกับแพลตฟอร์มที่ไม่รองรับ os.symlink

ในบรรทัดที่ 60–65 เรากำลังเขียนcontentจากค่าเริ่มต้นที่config.ymlมีโปรไฟล์คงที่ (ดูรายละเอียดด้านล่าง) ไปยังไฟล์ zip ของเรา

ในบรรทัดที่ 67–75 เรากำลังสร้างConnectionโดยใช้Fabricแพ็คเกจโดยการให้ข้อมูลประจำตัว โปรดทราบว่าเรากำลังใช้Connectionวัตถุที่ได้รับการแก้ไขที่นำเข้าจากโมดูลfabsของฉัน มีวิธีcp () เพิ่มเติมที่ใช้ในบรรทัดที่ 62

การเชื่อมต่อจากในโมดูลfabs โดยทั่วไปมันConnection มาจากfabricโมดูลเสริมด้วยวิธีcp ()

cp () เป็นวิธีการช่วยเหลือที่ cp ไฟล์เดียวจากเครื่องโลคัลไปยังเครื่องระยะไกล (Posix) หากมีไฟล์อยู่ในเครื่องระยะไกลไฟล์นั้นจะถูกเขียนทับ

พารามิเตอร์:

  • remote_dir: str หรือพา ธ ไปยังรีโมตไดเร็กทอรี
  • local_file: str หรือ Path to file บนเครื่องโลคัล

พารามิเตอร์:

  • filename: เส้นทางไปยังชื่อไฟล์อาจเป็นญาติหรือสัมบูรณ์
  • split_dirname: ชื่อไดเร็กทอรีในชื่อไฟล์ที่จะใช้เพื่อแยกเส้นทาง

บันทึก:

  • หากsplit_dirnameไม่อยู่ในfilename หรือsplit_dirnameอยู่Noneแสดงว่าพฤติกรรมนั้นไม่ได้กำหนดไว้
  • หากsplit_dirnameมีอยู่สองครั้งในเส้นทางระบบจะใช้อันสุดท้ายสำหรับการแยก

พารามิเตอร์:

  • split_dirname: เส้นทางจากไดเร็กทอรีนี้และด้านล่างจะถูกใช้ในการเก็บถาวร
  • zf: zipfile.ZipFile
  • src: ไฟล์ต้นฉบับที่จะใช้ในรายการในไฟล์เก็บถาวร
  • dst:ไม่สนใจดูsplit_dirnameในฟังก์ชันปิด
  • นี่คือฟังก์ชันการกลายพันธุ์ ใช้zf.write()วิธีการเปลี่ยนสถานะของไฟล์ zip shutil.copytree()ใช้สำหรับการเดินแบบวนซ้ำบนระบบไฟล์ (พร้อมการกรองและการจัดการ symlink) ไม่ใช่สำหรับการคัดลอกจริง
  • split_path () ถูกใช้ภายใน

พารามิเตอร์:

  • argumentParse:สามารถNone. คุณสามารถสร้างอินสแตนซ์ArgumentParserตัวอย่างเช่นด้วยค่าเริ่มต้น ดูที่นี่เช่นหรืออ่านเอกสารของที่นี่ArgumentParser แน่นอนคุณสามารถส่งผ่านNone และทำโพสต์โพรเซสสำหรับคำสั่งที่เติมข้อมูลได้
  • zf: argssys.argsถ้าไม่ได้ไม่ยับยั้ง

เมื่อระบุ--general.profiles ในอาร์กิวเมนต์ของระบบคุณจะแทนที่general.profilesรายการใน'config.yml' นั่นคือไฟล์'config.yml'ในไฟล์ zip จะมีgeneral.profilesรายการที่แตกต่างกันซึ่งจะมีค่าที่คุณระบุ

โดยการระบุ--config_fileอาร์กิวเมนต์ของระบบด้วยชื่อไฟล์ที่แตกต่างกันคุณสามารถแทนที่ชื่อคอนฟิกูเรชันเริ่มต้น'config.yml'เป็นชื่อไฟล์อื่นได้

ดูสิ่งนี้ด้วย:

Suggested posts

วิธีเรียกใช้ปลั๊กอิน ChatGPT ฟรีโดยใช้ Langchain

วิธีเรียกใช้ปลั๊กอิน ChatGPT ฟรีโดยใช้ Langchain

คุณต้องเคยได้ยินเกี่ยวกับปลั๊กอิน ChatGPT อันทรงพลังใหม่ทั้งหมด เช่น เบราว์เซอร์ ตัวแปลรหัส ฯลฯ แต่มีปัญหา การเข้าถึงปลั๊กอินถูกจำกัดไว้เฉพาะรายการรอ และหลายคนไม่สามารถเข้าถึงได้

ทรัพยากรการเข้ารหัสที่ฉันใช้มากที่สุด

ทรัพยากรการเข้ารหัสที่ฉันใช้มากที่สุด

สัปดาห์นี้ ฉันได้รับอีเมลจากสมาชิกรายการอีเมลรายวัน พวกเขาต้องการทราบ: คุณเข้าชมแหล่งข้อมูลใดรายวัน รายสัปดาห์ และรายเดือน คำถามที่ดี! ฉันยินดีที่จะพยายามแบ่งปันข้อมูลเชิงลึกเกี่ยวกับเวิร์กโฟลว์และทรัพยากรยอดนิยมที่ฉันใช้

Related posts

วิธีช่วยโลกและสร้างรายได้

วิธีช่วยโลกและสร้างรายได้

กี่ครั้งแล้วที่คุณทิ้งขวดพลาสติก เหยือกแก้ว กระป๋องอะลูมิเนียม หรือบรรจุภัณฑ์พลังงานสีเขียวโดยไม่คิดซ้ำสอง กี่ครั้งแล้วที่คุณอยากได้อะไรตอบแทนจากการรีไซเคิลมัน? ถ้าคุณเป็นเหมือนคนส่วนใหญ่ คำตอบคือหลายครั้ง การรีไซเคิลมักถูกมองว่าเป็นเรื่องยุ่งยาก เป็นงานบ้าน หรือเป็นหน้าที่ที่ไม่ก่อให้เกิดประโยชน์ในทันทีหรือจับต้องได้

การสร้างสภาพแวดล้อมการทำงานที่ปลอดภัย

การสร้างสภาพแวดล้อมการทำงานที่ปลอดภัย

“เขาจะปกป้องฉันเมื่อฉันตกอยู่ในอันตราย เขาจะซ่อนฉันไว้ในเต็นท์ของเขา

สองปีในการออกแบบ - ดี ไม่ดี และน่าเกลียด...

สองปีในการออกแบบ - ดี ไม่ดี และน่าเกลียด...

“หวัดดี Siri เล่น Me Dive โดย Olivia Dean” ในเดือนพฤษภาคม 2021 ฉันเริ่มฝึกงานที่ Future Academy Africa ในเมือง Akure ประเทศไนจีเรีย

ศิลปะเคยไม่ฝักใฝ่ฝ่ายใดหรือไม่?

ศิลปะเคยไม่ฝักใฝ่ฝ่ายใดหรือไม่?

เมื่อวานนี้ เราปิดการแข่งขัน Eurovision Song Contest ปีนี้ด้วยตอนจบที่สดใสและวุ่นวาย โดย Loreen นักร้องชาวสวีเดนคว้าถ้วยรางวัลกลับบ้าน กลายเป็นผู้หญิงคนแรกที่ชนะสองครั้งและนำมงกุฎกลับมายังสวีเดน 50 ปีหลังจาก ABBA ชนะการแข่งขัน กับ “วอเตอร์ลู” พวกเขากลายเป็นหนึ่งในการแสดงที่ยิ่งใหญ่ที่สุดในวงการเพลงป๊อป