如何更改Python模块名称?
是否只有重命名该文件才有可能?或者文件中是否有一个如何更改Python模块名称?,python,module,Python,Module,是否只有重命名该文件才有可能?或者文件中是否有一个\uuu模块\uuu变量来定义其名称?是的,您应该重命名文件。最好是在完成此操作后,从系统中删除oldname.pyc和oldname.pyo编译文件(如果存在),否则该模块也将以旧名称导入。每个类都有\u module\u属性,虽然我相信改变这个不会改变类的名称空间 如果可能的话,可能需要使用setattr将方法或类插入到所需的模块中,尽管您可能会使您的代码对未来的同行非常混乱 您最好重命名该文件。您希望将此\uuu模块\uuu变量放在何处,以
\uuu模块\uuu
变量来定义其名称?是的,您应该重命名文件。最好是在完成此操作后,从系统中删除oldname.pyc
和oldname.pyo
编译文件(如果存在),否则该模块也将以旧名称导入。每个类都有\u module\u
属性,虽然我相信改变这个不会改变类的名称空间
如果可能的话,可能需要使用setattr将方法或类插入到所需的模块中,尽管您可能会使您的代码对未来的同行非常混乱
您最好重命名该文件。您希望将此
\uuu模块\uuu
变量放在何处,以便原始脚本知道要导入什么?模块由文件名识别,并在sys.path
变量中定义的路径中查找
因此,您必须重命名该文件,然后删除
oldname.pyc
,以确保一切正常 如果您真的想使用“import newname”语句导入文件“oldname.py”,有一个技巧可以实现:使用旧名称导入模块,然后使用新名称将其插入到sys.modules
中。后续的导入语句也将在新名称下找到它。代码示例:
# this is in file 'oldname.py'
...module code...
用法:
# inject the 'oldname' module with a new name
import oldname
import sys
sys.modules['newname'] = oldname
现在,您可以在任何地方使用
导入新名称导入模块,您可以使用as更改导入模块时使用的名称:
import foo as bar
print bar.baz
当您导入模块名时,Python解释器会在PYTHONPATH中查找文件名。所以,在不更改文件名的情况下,无法更改该名称。但你当然可以做到:
import module_name as new_module_name
甚至
import module_name.submodule.subsubmodule as short_name
用于编写数据库代码
import sqlite3 as sql
sql.whatever..
然后,要将例如sqlite3
切换到pysqlite
,您只需更改导入行即可我遇到了bsddb这样的问题。我被迫安装bsddb3模块,但数百个脚本导入了bsddb。我提取了bsddb3 egg,并在site packages目录中创建了一个软链接,从而使“bsddb”和“bsddb3”在python中都是同一个属性,而不是更改所有属性中的导入。您可以通过如下所示的module属性设置模块
函数模块
您甚至可以创建装饰器来更改文件中特定函数的模块名称,例如:
def set_模块(模块):
“”用于重写函数或类上的_模块的装饰程序。
用法示例::
@set_模块('numpy')
def示例():
通过
断言示例.\uuuu模块\uuuu=='numpy'
"""
def装饰器(func):
如果模块不是无:
函数模块
返回函数
返回
然后使用
@set_module('my_module')
def some_func(...):
请注意,因为这个装饰是为了改变个人
函数的模块名称
此示例取自numpy源代码:重命名文件有什么问题?为什么重命名不起作用?事实上,这只是懒惰。。。我不想在Launchpad上删除并再次添加该文件。我想不出我想这样做的情况,但您可以这样做很酷:)一种情况:您希望与python 2.6和2.7兼容,但希望使用一些新的2.7 unittest功能的项目。这个技巧允许我们在仍然使用新功能的情况下让代码简单地使用“import unittest”,因此我们不需要每次切换python版本时都修改一堆import语句。太好了。示例:导入tensorflow.keras作为tf_keras导入系统模块['tf_keras']=keras然后您将能够在tensorflow版本的kerasI中使用keras示例。我希望将此应用于这样的示例:我有一个pname模块,并开发了一个修改后的pname_dev模块。在运行的脚本中,我希望在任何情况下切换import pname或pname_dev,并且脚本使用了许多行import pname.util.a,导入pname.analysis.run。。。。然后,我不想修改pname的所有行,我只想将原始模块更改为pname_orig,然后让pname选择性地指示pname_orig或pname_dev。我希望这对它有用。