4

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

项目结构

websocket-server
       |
       |---- websocket.py
       |
       '---- tests
               |
               '---- test.py

测试.py

from websocket import WebSocketsServer  # my module
from websocket import create_connection # installed module

有没有办法解决这个问题:

  • 无需重命名我的模块 ( websocket.py)
  • 不会用丑陋的方式污染我的项目__init__()
  • 需要同时在 Python3 和 2 上工作
4

5 回答 5

4

你可以将你的模块嵌套在一个包中吗?

from mywebsocket.websocket import WebSocketsServer # my module
from websocket import create_connection # installed module

https://docs.python.org/2/tutorial/modules.html#packages

于 2015-02-18T18:08:01.460 回答
1

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

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

> ln -s . myroot

然后只需使用简单的前缀导入您想要的任何内容:

import myroot.websocket
于 2018-06-12T11:34:27.247 回答
0

我最终按照我的意愿解决了这个问题。该解决方案是骇人听闻的,但没关系,因为它仅适用于一种特定类型的测试。

import websocket as wsclient # importing the installed module

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

所以我现在可以将我自己的模块称为websocket并将安装的模块称为wsclient.

于 2015-02-19T18:38:11.213 回答
0

有一个imp模块——尽管它在 Python 3.4 中即将被弃用。它允许您动态导入模块

my_websource = imp.load_source('my_websource', <path to your module.py>')
于 2015-02-18T18:10:11.297 回答
0

您可以选择不同的大写形式,例如 webSocket,因为 Python 解析是区分大小写的。

于 2015-02-22T18:28:06.530 回答