", value dacă am nume acest getopt.py și rulați-l nu funcționează în timp ce încearcă să se"> ", value dacă am nume acest getopt.py și rulați-l nu funcționează în timp ce încearcă să se"> ", value dacă am nume acest getopt.py și rulați-l nu funcționează în timp ce încearcă să se" />

nume de fișier python un fișier la fel ca lib

Am urmatorul scenariu

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

dacă am nume acest getopt.py și rulați-l nu funcționează în timp ce încearcă să se importe

există o cale în jurul valorii de acest lucru, astfel încât să pot păstra acest nume de fișier, dar specifica la import că vreau lib standard python și nu acest fișier?

Soluție bazată pe răspunsul lui Vinko:

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 răspunsuri

Nu trebuie să denumiți scripturile ca modulele existente. Mai ales dacă este standard.

Acestea fiind spuse, puteți să atingeți sys.path pentru a modifica ordinea de încărcare a bibliotecii

~# 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']

În plus, vă recomandăm să evitați importul integral și să o faceți diferit, după cum urmează:

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
adăugat
am folosit sys.path.reverse() ca eu cred că este mai bine, apoi să-l eliminați, deoarece poate cineva are nevoie pentru a importa un alt lib, care de fapt este în dosarul actual va actualiza întrebarea mea cu soluția am găsit pe baza sfaturi dvs. funcționează, dar este rău în opinia mea. mult mai bine să nu numiți scripturi ca libs
adăugat autor daniels, sursa
@daniels: vedeți aici python.org/dev/peps/pep-0328
adăugat autor André, sursa

Ar trebui să evitați să numiți fișierele python cu nume de module standard ale bibliotecilor.

4
adăugat
Din păcate, acest sfat este greu de urmărit deoarece apar nume noi de bibliotecă standard ... Am fost mușcat o dată de modulul "email" și a doua oară de modulul "uuid" :-(
adăugat autor bortzmeyer, sursa
când dezvolt ceva ce fac, dar aceasta este doar o curiozitate. cineva de pe forum avea această problemă și am fost curios dacă există o cale în jurul valorii de acest lucru
adăugat autor daniels, sursa
@daniels: există - utilizați nume unice.
adăugat autor S.Lott, sursa
--- costul actualizării aplicației dvs. la o nouă versiune standard a bibliotecii ---
adăugat autor gimel, sursa
import getopt as bettername

Acest lucru ar trebui să vă permită să sunați la getopt ca numele de pariuri.

1
adăugat
se importă însăși (getopt.py) și nu biblioteca
adăugat autor daniels, sursa

Python nu vă oferă o modalitate de a califica modulele. S-ar putea să reușești să îndepliniți acest lucru prin eliminarea intrării "" din sys.path sau prin mutarea acesteia până la capăt. N-aș recomanda.

0
adăugat

Ei bine, ai putea (re) muta directorul curent din sys.path, care conține calea de căutare modificabilă pentru biblioteci pentru a face să funcționeze, dacă chiar ai nevoie de asta.

0
adăugat
Python România
Python România
100 participanți

Comunitatea pasionaților de Python din România.