Как я могу вызвать модуль Python в папке с версионными пакетами? - PullRequest
2 голосов
/ 20 апреля 2010

Мне нужно написать Python-коды, которые запускаются внутри хост-приложения. Коды Python должны быть развернуты в определенной папке хост-приложения. Я должен поместить свой входной модуль Python в корень конкретной папки. И я хочу поместить все мои другие коды Python и c / c ++ dll в подпапку, я предпочитаю называть подпапку как XXX-1.0, номер - это версия моих кодов python Модуль Python для входа - это просто вызов модуля Python из подпапки.

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

Ответы [ 3 ]

1 голос
/ 20 апреля 2010

Я не уверен, что правильно понял ваш вопрос, но вот простой способ получить несколько версий пакета без коллизий.

Структура каталогов:

C:\tmp\eggs>dir /B /S
C:\tmp\eggs\libs
C:\tmp\eggs\test.py
C:\tmp\eggs\libs\foo-1.0.egg
C:\tmp\eggs\libs\foo-2.0.egg
C:\tmp\eggs\libs\foo-1.0.egg\foo.py
C:\tmp\eggs\libs\foo-2.0.egg\foo.py

Теперь содержимое файлов:

# contents of C:\tmp\eggs\libs\foo-1.0.egg\foo.py
version=(1,0)

# contents of C:\tmp\eggs\libs\foo-2.0.egg\foo.py
version=(2,0)

#contents of C:\tmp\eggs\test.py:

import sys
sys.path.insert(1, 'libs')
from pkg_resources import require

require('foo<1.5')
import foo
print foo.version
# will output (1,0)

Если вы измените 'foo<1.5' на 'foo>1.5', или 'foo', выход изменится на (2,0)

Подробности вы найдете в setuptools документации.

1 голос
/ 20 апреля 2010

Если вы создали файл .pth, например, X.pth и поместили XXX-1.0 внутрь в качестве содержимого

XXX-1.0\
        - xxx.py
X.pth

Тогда вы могли бы import xxx

Примечание : проверено только в папке site-packages, я не уверен, что вы можете поместить вашу подпапку куда-либо.

Редактировать : Например, wxPython делает это, так как он может иметь несколько версий на одном компьютере.

wx-2.8-msw-unicode \
                    wx
                      \
                       more stuff
wx.pth (wx-2.8-msw-unicode)
0 голосов
/ 20 апреля 2010

Вот как я это сделал:

tools
  |-- packageA
        |-- packageA-1.0
              |-- packageA
                    |-- modules
        |-- packageA-2.0
              |-- packageA
                    |-- modules
  |-- packageB
        ...

Таким образом, когда вы хотите обновить, просто добавьте /packageA/packageA-2.0 к PYTHONPATH, и вы все равно можете сделать import packageA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...