python называет файл таким же, как lib

У меня есть следующий скрипт

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

если я назову этот getopt.py и запустил его, он не работает, поскольку он пытается импортировать себя

есть ли способ обойти это, поэтому я могу сохранить это имя файла, но указать при импорте, что я хочу стандартную библиотеку python, а не этот файл?

Решение, основанное на ответе Винко:

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 (), поскольку я думаю, что лучше удалить его, потому что, возможно, нужно импортировать другую библиотеку, которая фактически находится в текущей папке, будет обновлять мой вопрос с помощью решения, которое я нашел на основе ваших советов, которые он работает, но он нечестив в мое мнение. гораздо лучше не называть скрипты типа libs
добавлено автор daniels, источник
@ daniels: см. здесь python.org/dev/peps/pep-0328
добавлено автор André, источник

Вам не следует называть ваши файлы python стандартными именами библиотечных модулей.

4
добавлено
К сожалению, этот совет трудно понять, потому что появляются новые имена стандартных библиотек ... Я был укушен один раз модулем «email», а во второй раз модулем «uuid» :-(
добавлено автор bortzmeyer, источник
когда я что-то развиваю, но это просто любопытство. кто-то на форуме имел эту проблему, и я был любопытным, если есть способ обойти это
добавлено автор daniels, источник
@ daniels: есть - использовать уникальные имена.
добавлено автор S.Lott, источник
--- Стоимость обновления вашего приложения до новой версии стандартной библиотеки ---
добавлено автор gimel, источник
import getopt as bettername

Это должно позволить вам называть getopt как bettername.

1
добавлено
он по-прежнему импортирует себя (getopt.py), а не библиотеку
добавлено автор daniels, источник

Python не дает вам возможности квалифицировать модули. Вы могли бы выполнить это, удалив запись «из sys.path» или переместив ее до конца. Я бы не рекомендовал его.

0
добавлено

Ну, вы можете (переместить) текущую директорию из sys.path, которая содержит модифицируемый путь поиска для библиотек, чтобы она работала, если вам это действительно нужно.

0
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community