2015-02-18 4 views
2

У меня есть модуль с именем websocket. Для этого модуля я хочу несколько тестов и для этих тестов I pip install соответствующий модуль. Проблема в том, что установленный модуль имеет то же самое имя как мой собственный модуль.Как решить конфликт имен модулей в Python?

Структура проекта:

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

test.py:

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

Есть ли способ решить эту проблему:

  • Без того, чтобы переименовать мой модуль (websocket.py)
  • Без загрязняют мой проект с некрасивыми __init__()
  • должен работать как на Python3 и 2
+0

Почему вы переименовываете свой модуль со стола? Это точно решение. – kindall

+1

@kindall, потому что я не хочу другого имени. Для меня «websocket» - идеальное имя для моего однопользовательского модуля. – Pithikos

ответ

3

Можете ли вы гнездо вашего модуля в пакете?

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

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

+0

, вероятно, единственный правильный ответ, исключая хаки. Если у вас есть тесты, у вас должен быть пакет. – goncalopp

+0

@goncalopp Конечный «продукт» - это простой простой файл. Создание пакета только для одного файла кажется слишком большим. – Pithikos

0

Там в имп модуль - хотя это на пути к устаревшим в Python 3.4. Он позволяет динамически импортировать модули

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

Решение Python 3.3+ здесь: http://stackoverflow.com/questions/67631/how-to-import-a-module-given-the-full-path – Wes

0

Я решил это в конце, как я хотел. Решение хакерское, но это не имеет значения, так как это только для одного конкретного типа тестов.

Так теперь я могу сослаться на свой собственный модуль в качестве websocket и установленного модуля в wsclient.

0

Вы можете выбрать другую капитализацию, такую ​​как webSocket, поскольку разрешение Python чувствительно к регистру.