2012-12-04 4 views
0

Коротко это - мне нужно получить console_script, чтобы вернуть мне текущий путь выполнения, чтобы я мог переопределить модули, которые он использует во время выполнения.Получить runpath скрипта-скрипта python

Вот моя основная установка (резюмировать как можно лучше):

package_1: 
     caller_module.py 

    console_script_module: 
     main.py 
     dir_of_modules_to_use/ 
     a.py 
     b.py 
     c.py 
     setup.py 

    setup.py contents: 
     setup(
     entry_points = { 
      'console_scripts': [ 
      'console-script-module = console_script_module.main:main' 
      ] 
     } 
     )   

Longer деталь: Так caller_module.py вызовы консольный скрипт-модуль путем выдачи подпроцесс вызова. В свою очередь выполняются модули, видимые в dir_of_modules_to_use. Я хотел бы предоставить свою версию этих модулей, переопределив их, прежде чем это произойдет через отдельный скрипт. Для этого мне нужно знать путь запуска, где консольный скриптовый модуль был установлен, так как он несовместим (например, изменения в virtualenv).

Я попытался добавить это к main.py и используя отдельный аргумент командной строки, чтобы назвать его:

def print_absoulute_dir():  
     print os.path.abspath('dir_of_modules_to_use') 

К сожалению, это только возвращает путь, куда бы я сделать вызов сценария консоли.



ОТКАЗ - это Hacky и ужасно, я знаю, это от кода, который я унаследовал и мне просто нужно что-то работает в краткосрочной перспективе. Я, к сожалению, не могу изменить код в пределах caller_module.py, в противном случае я бы просто изменил способ его вызова console_script_module: main.py.

ответ

0

Я не уверен, если я действительно понимаю, что вы хотите, но каждый модуль питона имеет __file__ атрибут, который содержит его местоположение в файловой системе, и вы можете использовать sys.path изменить модуль питона пути поиска

import urllib 
import sys 

print urllib.__file__ 
print sys.path 
+0

Возможно, я смущен тем, как работает setup.py console_script/что такое результирующая структура каталогов. Я думал, что setup.py install просто копирует файлы в известное местоположение, а затем псевдонизирует вызов консольного скрипта? Поэтому я решил, что должно быть возможно программно найти, где он был установлен. Я пробовал оба из того, что вы упомянули * urllib .__ file __ * возвращен «/usr/lib/python2.7/urllib.pyc», и единственная ссылка на * sys.path * о console_script_module была его файлом яйца. – rikityplikity

+0

"* Возможно, я смущен тем, как setup.py console_script работает *" Кажется, что это очень верно :-) Из вызова * sys.path *, где он возвращает файл яйца, содержащийся в нем, есть из которого запускается мой консольный скрипт. Это некрасиво, но то, что я могу сделать, это вызов * sys.path *, поиск в списке, возвращаемом для * console_script_module *, и оттуда найти * dir_of_modules_to_use * – rikityplikity

Смежные вопросы