الثعبان اسم ملف نفس ل lib

لدي البرنامج النصي التالي

import getopt, sys
opts, args = getopt.getopt(sys.argv[1:], "h:s")
for key,value in opts:
    print key, "=>", value

إذا سمّيتُ هذا getopt.py وتشغيله لا يعمل لأنه يحاول استيراد نفسه

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

الحل القائم على إجابة فينكو:

import sys
sys.path.reverse()
from getopt import getopt

opts, args = getopt(sys.argv[1:], "h:s")

for key,value in opts:
    print key, "=>", value
2

5 إجابة

لا يجب عليك تسمية النصوص الخاصة بك مثل الوحدات الموجودة. خصوصا إذا كان المعيار.

ومع ذلك ، يمكنك لمس sys.path لتعديل ترتيب تحميل المكتبة

~# cat getopt.py
print "HI"
~# python
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import getopt
HI

~# python
Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.remove('')
>>> import getopt
>>> dir(getopt)
['GetoptError', '__all__', '__builtins__', '__doc__', '__file__', '__name__', 'do_longs', 'do_shorts', 'error', 'getopt', 'gnu_getopt', 'long_has_args', 'os', 'short_has_arg']

بالإضافة إلى ذلك ، قد ترغب في تجنب الاستيراد الكامل والقيام بذلك بشكل مختلف ، مثل:

import sys
sys.path.remove('')
from getopt import getopt
sys.path.insert(0,'')
opts, args = getopt(sys.argv[1:], "h:s")
for key,value in opts:
    print key, "=>", value
7
وأضاف
اعتدت sys.path.reverse() كما أعتقد أنه من الأفضل ثم إزالته لأنه ربما يحتاج المرء لاستيراد LIB أخرى في الواقع في المجلد الحالي سيتم تحديث سؤالي مع الحل وجدت على أساس النصائح الخاصة بك أنه يعمل ولكن الأشرار في رأيي. أفضل بكثير لعدم تسمية البرامج النصية مثل libs
وأضاف المؤلف daniels, مصدر
daniels: راجع هنا python.org/dev/peps/pep-0328
وأضاف المؤلف André, مصدر

يجب تجنب تسمية ملفات python بأسماء وحدات برامج المكتبة القياسية.

4
وأضاف
للأسف، هذه النصيحة من الصعب اتباع لأن أسماء المكتبة القياسية الجديدة تظهر ... لقد لدغت مرة واحدة من قبل وحدة "البريد الإلكتروني" و للمرة الثانية من قبل وحدة "UUID" :-(
وأضاف المؤلف bortzmeyer, مصدر
عند تطوير شيء أفعله ، لكن هذا مجرد فضول. كان شخص ما في المنتدى يعاني من هذه المشكلة وكنت أفكر إذا كان هناك طريقة لذلك
وأضاف المؤلف daniels, مصدر
daniels: هناك - استخدام أسماء فريدة من نوعها.
وأضاف المؤلف S.Lott, مصدر
--- تكلفة ترقية تطبيقك إلى إصدار مكتبة قياسي جديد ---
وأضاف المؤلف gimel, مصدر
import getopt as bettername

هذا يجب أن يسمح لك باستدعاء getopt باعتباره bettername.

1
وأضاف
لا يزال يستورد نفسه (getopt.py) وليس المكتبة
وأضاف المؤلف daniels, مصدر

لا تعطيك بايثون وسيلة لتأهيل الوحدات. قد تتمكن من تحقيق ذلك عن طريق إزالة الإدخال من sys.path أو بنقله إلى النهاية. أنا لا أوصي به.

0
وأضاف

حسنًا ، يمكنك (إعادة) نقل المستند الحالي من sys.path ، والذي يحتوي على مسار البحث القابل للتعديل للمكتبات ليجعلها تعمل ، إذا كنت في حاجة فعلًا لذلك.

0
وأضاف