2013-08-27 2 views
3

Как часть моей системы сборки, я использую модифицированную версию пакета Python (cogapp). Я не хочу устанавливать пакет, потому что:Пакет запуска Python без установки

  1. Я изменил пакет и не хочу беспокоиться о столкновении с неизмененными версиями, которые могут быть уже установлены.
  2. Лучше, если пользователям системы сборки не нужно устанавливать дополнительные пакеты.

Однако у меня возникли проблемы с использованием пакета, если он не установлен. Если является установлен, я могу запустить:

python -m cogapp <additional args>

и все работает как задумано.

Пакет имеет __main__.py скрипт:

import sys 
from cogapp import Cog 

sys.exit(Cog().main(sys.argv)) 

Я попытался запустить это непосредственно, например:

python -m <path>/__main__ <additional_args>

Но я получаю ошибку:

... 
/__main__.py", line 3, in <module> 
    from cogapp import Cog 
ImportError: No module named cogapp 

Это вероятно, связано с ошибкой, которую я получаю, если я запустил __init__.py:

from .cogapp import *

Ошибка:

from .cogapp import * 
ValueError: Attempted relative import in non-package 

Как я могу запустить пакет как пакет?

EDIT:

Я нашел исправить, удалив весь относительный импорт из cogapp и удаления -m, т.е. не работает в качестве модуля. В этом случае это не так уж плохо, потому что это небольшой пакет с единственным каталогом. Однако меня интересует, как это должно быть сделано в будущем. На эту тему написано много материала, но нет четких ответов!

ответ

2

Вот решение, к которому я пришел.

Отказ от ответственности: Вы фактически устанавливаете пакет, но на другой путь, чем стандартный.

$ mkdir newhome 
$ python setup.py install --home=./newhome 
$ PYTHONPATH=$PWD/newhome/lib/python <COMMAND_NEEDING_THAT_PACKAGE> 
Смежные вопросы