Python Module ที่มีเส้นประหรือยัติภังค์ (-) อยู่ในชื่อ


92

ฉันมีโมดูล python ที่มีเครื่องหมายขีดกลางอยู่ในชื่อ foo-bar.py

การเปลี่ยนชื่อโมดูลเป็นสิ่งที่ฉันต้องการหลีกเลี่ยงเนื่องจากมีการแชร์โมดูลและฉันจะต้องไล่ตามสถานที่ทั้งหมดที่ใช้เพื่อให้กรณีพิเศษของฉันทำงานได้

มีวิธีโหลดโมดูลที่มีชื่อต้องห้าม '-' หรือไม่?

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


5
คุณไม่สามารถทำ find-in-files ใน IDE ของคุณและแทนที่foo-bars ทั้งหมดด้วยfoobarหรืออะไรก็ได้? นั้นยากแค่ไหน?
agf


2
คำตอบนี้โดยเฉพาะ: stackoverflow.com/questions/761519/…
BenH

agf คำตอบสั้น ๆ : ไม่ใช่รหัสทั้งหมดของฉัน
ข้าม Huffman

S.Lott ผู้ใช้รายอื่นเป็นแอปพลิเคชันเชิงพาณิชย์ ซึ่งเป็นวิธีที่ฉันรู้ว่ามันเป็นไปได้
ข้าม Huffman

คำตอบ:


98

คุณสามารถทำได้โดยใช้__import__(). ตัวอย่างเช่น:

foobar = __import__("foo-bar")

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


4
ขอบคุณ. ฉันเข้าใจว่าควรปฏิบัติตามอนุสัญญาทุกที่ในทางปฏิบัติ ฉันจะนำเสนอปัญหาเฉพาะนี้ในระหว่างการตรวจสอบรหัสแผนก
ข้าม Huffman

58

ฉันรู้ว่าคำถามนี้ได้รับการตอบเพื่อความพึงพอใจของผู้ถาม __import__()แต่ที่นี่คือคำตอบที่ผมเชื่อว่าอีกมีบุญบางอย่างข้างต้นโดยใช้

import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()

ตามเอกสาร:

"This provides an implementation of import which is portable to any 
Python interpreter. This also provides an implementation which is 
easier to comprehend than one implemented in a programming language 
other than Python."

Python 2.7 + เท่านั้น


5
ฉันกำลังค้นหาวิธีการทำสิ่งนี้และคำตอบของคุณตรงกับสถานการณ์ของฉันมากกว่าคำตอบที่เก่ากว่า เป็นเรื่องดีเสมอหากคุณเห็นคำตอบที่แตกต่างจากคำตอบที่มีอยู่แล้วเพื่อเพิ่มเป็นคำตอบใหม่เพื่อให้ผู้ที่อยู่ในตำแหน่งเช่นฉันสามารถค้นหาข้อมูลที่เกี่ยวข้องทั้งหมดได้ในที่เดียว
Davy M

1

ลองใช้ขีดล่างแทนยัติภังค์

นำเข้า pymysql_utils

ใช้งานได้สำหรับฉันแม้ว่าการนำเข้า pymysql-utils เป็นชื่อของโมดูลที่ pip ใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.