python命名一个与lib相同的文件

时间:2008-10-14 16:17:23

标签: python

我有以下脚本

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

如果我将此名称命名为getopt.py并且在尝试导入自身时运行它不起作用

有没有办法绕过这个,所以我可以保留这个文件名但是在导入时指定我想要标准的python lib而不是这个文件?

基于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

5 个答案:

答案 0 :(得分:7)

您不应将脚本命名为现有模块。特别是如果标准。

也就是说,您可以触摸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

答案 1 :(得分:4)

您应该避免使用标准库模块名称命名python文件。

答案 2 :(得分:0)

Python没有为您提供合格模块的方法。您可以通过从sys.path中删除''条目或将其移动到最后来完成此操作。我不推荐它。

答案 3 :(得分:0)

好吧,您可以(重新)从sys.path移动当前目录,该目录包含库的可修改搜索路径以使其正常工作(如果您确实需要)。

答案 4 :(得分:-1)

import getopt as bettername

这应该允许你将getopt称为bettername。