如何解决Python中的模块名冲突?

如何解决Python中的模块名冲突?,python,name-collision,Python,Name Collision,我有一个名为websocket的模块。对于这个模块,我需要一些测试,对于这些测试,我安装相应的模块。问题是安装的模块与我自己的模块的名称完全相同 项目结构: websocket-server | |---- websocket.py | '---- tests | '---- test.py from websocket import WebSocketsServer # my

我有一个名为websocket的模块。对于这个模块,我需要一些测试,对于这些测试,我安装相应的模块。问题是安装的模块与我自己的模块的名称完全相同

项目结构

websocket-server
       |
       |---- websocket.py
       |
       '---- tests
               |
               '---- test.py
from websocket import WebSocketsServer  # my module
from websocket import create_connection # installed module
测试.py

websocket-server
       |
       |---- websocket.py
       |
       '---- tests
               |
               '---- test.py
from websocket import WebSocketsServer  # my module
from websocket import create_connection # installed module
有没有办法解决这个问题:

  • 无需重命名我的模块(
    websocket.py
  • 而不会用丑陋的
    \uuuuu init\uuuuu()污染我的项目
  • 需要同时在Python3和Python2上工作

您能将模块嵌套在一个包中吗

from mywebsocket.websocket import WebSocketsServer # my module
from websocket import create_connection # installed module
请参见

有一个imp模块,尽管它在Python3.4中即将被弃用。它允许您动态导入模块

my_websource = imp.load_source('my_websource', <path to your module.py>')
my_websource=imp.load_source('my_websource','))

我终于如愿以偿地解决了这个问题。这个解决方案很粗糙,但并不重要,因为它只针对一种特定类型的测试

import websocket as wsclient # importing the installed module

del sys.modules["websocket"]
sys.path.insert(0, '../..')
import websocket             # importing my own module

因此,我现在可以将自己的模块称为
websocket
,将安装的模块称为
wsclient
您可以选择不同的大写形式,如websocket,因为Python解析区分大小写。

我已经解决了一个类似的问题,它只适用于UNIX/Linux

在根文件夹中,创建一个指向自身的软链接:

> ln -s . myroot
然后只需使用简单前缀导入所需内容:

import myroot.websocket

可能是唯一正确的答案,不包括黑客。如果你有测试,你应该有一个包。@goncalopp最终的“产品”是一个简单的文件。只为一个文件制作一个包感觉太多了。这里还有一个Python 3.3+解决方案:为什么要将模块重命名?这正是解决办法。@kindall,因为我不想要其他名字。对我来说,“websocket”是我的单文件模块的完美名称。