واردات بيثون: استيراد وحدة نمطية دون .py التمديد؟

StackOverflow https://stackoverflow.com/questions/881639

  •  22-08-2019
  •  | 
  •  

سؤال

في نظام بيثون التي أطور، ونحن عادة ما يكون هذا الهيكل وحدة.

mymodule/
mymodule/mymodule/feature.py
mymodule/test/feature.py

وهذا يسمح لنا إطار اختبار القليل بسهولة استيراد اختبار / feature.py وحدة تشغيل الاختبارات. ومع ذلك، لدينا الآن الحاجة إلى بعض النصوص قذيفة (التي هي مكتوبة في بيثون):

mymodule/
mymodule/scripts/yetanotherfeature.py
mymodule/test/yetanotherfeature.py

ويتم تثبيت yetanotherfeature.py من خلال حزمة ديبيان وحدة إلى / البيرة / بن. ولكن من الواضح أننا لا نريد تمديد .py هناك. لذلك، من أجل إطار اختبار للا يزال قادرا على استيراد وحدة علي أن أفعل هذا الرابط thingie رمزي:

mymodule/
mymodule/scripts/yetanotherfeature
mymodule/scripts/yetanotherfeature.py @ -> mymodule/scripts/yetanotherfeature
mymodule/test/yetanotherfeature.py

هل من الممكن لاستيراد وحدة نمطية من اسم الملف في بيثون، أو يمكنك التفكير في حل أكثر أناقة لهذا؟

هل كانت مفيدة؟

المحلول

هل يمكن على الأرجح استخدام بعض تريكير باستخدام استيراد السنانير ، أنا لا أوصي رغم ذلك. من ناحية أخرى وأود أيضا ربما تفعل ذلك على العكس من ذلك، لدينا مخطوطات .py الخاص بك في مكان ما، وجعل 'الروابط .py'less رمزية لملفات .py. حتى مكتبتك يمكن أن يكون في أي مكان ويمكنك تشغيل الاختبار من داخل عن طريق استيراد بشكل طبيعي أنه (نظرا لأنه يحتوي على تمديد الحمر)، ومن ثم نقطة / البيرة / بن / yetanotherfeature إليها، حتى تتمكن من تشغيله دون الحمر.

وتحرير: فما باللك هذا (على الأقل الجزء السنانير)، والحل عفريت استيراد تبدو جيدة جدا بالنسبة لي:)

نصائح أخرى

عفريت حدة يستخدم لذلك:

daniel@purplehaze:/tmp/test$ cat mymodule
print "woho!"
daniel@purplehaze:/tmp/test$ cat test.py 
import imp
imp.load_source("apanapansson", "mymodule")
daniel@purplehaze:/tmp/test$ python test.py
woho!
daniel@purplehaze:/tmp/test$ 

وتحقق من وحدة عفريت:

http://docs.python.org/library/imp.html

وهذا سوف يسمح لك لتحميل وحدة نمطية حسب اسم الملف. ولكن أعتقد ارتباط رمزي هو حل أكثر أناقة.

وثمة خيار آخر يتمثل في استخدام setuptools:

<اقتباس فقرة>   

و"... ليس هناك طريقة سهلة لديهم الاتفاقيات المحلية المباراة اسم الملف النصي على حد سواء ويندوز ومنصات POSIX. ومن ناحية أخرى، كنت كثيرا ما لديك لإنشاء ملف منفصل لمجرد" الرئيسي "السيناريو، وعندما الخاص بك الفعلية" الرئيسي "هي وظيفة في وحدة نمطية في مكان ما ... setuptools إصلاحات كل هذه المشاكل عن طريق توليد تلقائيا مخطوطات لك مع الملحق الصحيح، وعلى ويندوز فإنه سيتم أيضا إنشاء ملف. exe ..."

https://pythonhosted.org/setuptools/setuptools.html#automatic- النصي خلق

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top