Конфликтующие пакеты Python Как это можно решить? - PullRequest
0 голосов
/ 16 ноября 2009

Итак, сегодня мы приступили к реализации чего-то и обнаружили, что уже есть несколько приложений, использующих старую реализацию нашей собственной библиотеки Python. Называется cis_py. Теперь все приложения для нашей реализации находятся в папке bin. Это где cis_py в настоящее время проживает.

Теперь мы приступили к развертыванию одного из наших больших приложений на Python, которое использует новую версию нашей внутренней библиотеки. Мы не можем просто перезаписать существующие версии. Поскольку это приведет к поломке всех существующих приложений.

По сути, я не могу обновить существующие приложения и не могу переписать новое приложение. Теперь я подумал попробовать следующее:

cis\cis_py\<python library files>

Затем выполните поиск и замену в существующем приложении и измените следующее:

cis_py.<some python file>

К

cis.cis_py.<some python file>

К сожалению, это приводит к повреждению нескольких файлов __init__.py в библиотеке из-за использования этого:

from cis_py import rga
from cis_py import util

Сегодня день внедрения, и он должен начать действовать сегодня, так как через несколько часов мы начнем получать данные автоматически.

Как и что я могу сделать? Все должно находиться в одной папке с именем bin. Благодаря автоматической системе обработки. Есть ли способ, которым я могу обмануть питона?

Ответы [ 4 ]

4 голосов
/ 16 ноября 2009

Попробуйте import sys; sys.path.insert(0, "cis") в самом начале вашего основного файла Python.

1 голос
/ 16 ноября 2009

Похоже, решение Алекса Мартелли решило чрезвычайную ситуацию для вас. Вот еще одно решение, которое я считаю лучшим в долгосрочной перспективе.

В исходных файлах замените строку

import cis_py

с линией

import cis.cis_py as cis_py

Таким образом, когда более поздний код говорит from cis_py import foo, он будет работать.

Это менее "волшебно", потому что каждый исходный файл будет содержать эту измененную строку импорта, поэтому кто-то, изучающий исходный файл, поймет истинный источник модуля cis_py (без необходимости также изучать основной исходный файл Python). 1012 *

0 голосов
/ 16 ноября 2009

Добавить версию к имени: cis_py2. Возможно, вам придется внести изменения в класс, но ничего, что нельзя сделать с помощью быстрого скрипта (не запускайте его без предварительного тестирования):

sed 's/cis_py/cis_py2/g' `find -name '.py$'`

Предполагается, что cis_py является только именем модуля, а имя больше не имеет.

0 голосов
/ 16 ноября 2009

Первый шаг - начать рассказывать людям об этой проблеме. Поговорите со своими коллегами и начальником и сообщите им о проблеме, которую вы обнаружили, так как возможно , что придется отменить или отложить начало работы, пока идет решение. Необходимо будет где-то внести изменения, и было бы хорошо (и может потребоваться) провести дополнительное тестирование, чтобы убедиться, что эти изменения ничего не нарушают.

Не зная, как работает ваша система, можно предположить, что, возможно, вы сможете запустить новую версию в измененной среде, которая направит ее на новую версию библиотеки?

...