Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=8852746&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Tue Apr 12 19:53:20 2016
Кодировка: Windows-1251
[python, scons] аналог requre_once из PHP - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
StepLg
смотритель

Рег.: 26.11.2005
Сообщений: 350
Из: Москва
Рейтинг: 25
  [python, scons] аналог requre_once из PHP
      12.08.2009 19:06
 

нужно:
* из разных скриптов иметь подгрузить ( == выполнить ) код из определенного файла (файл X.py), путь к которому задается абсолютным путем
* при этом внутри этого дополнительного файла X.py должна быть возможность прочитать файлы из той же самой директории, в которой лежит X.py без знания абсолютного пути к нему
* код из файла должен выполняться только один раз, не смотря на то, что "дергать" его могут сколько угодно раз.

я так понимаю, это нужно как-то экспериментировать с модулями/импортами

кто-нибудь подскажет, как это можно сделать?



Редактировал StepLg (12.08.2009 21:11)
psa
sir

Рег.: 03.04.2004
Сообщений: 1205
Рейтинг: 509
  Re: [python] аналог requre_once из PHP [re: StepLg]
      12.08.2009 20:12
 

Quote:

* из разных скриптов иметь подгрузить ( == выполнить ) код из определенного файла (файл X.py), путь к которому задается абсолютным путем



Курить модуль imp
Quote:

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



В питоне импорт происходит всегда (если не выгружаешь) один раз
То есть для этого пункта ничего делать не надо
code:
$ tail m*.py ==> m0.py <== print "Module m0 loaded" ==> m1.py <== import m0 ==> m2.py <== import m0 import m1 $ python m2.py Module m0 loaded


Как передавать директорию - хз, может можно как-то узнать откуда загрузились. Навскидку не скажу

UPD
Можно попробовать через sys.modules вытащить путь, по которому нас загрузили.



Antivirus alert: file .signature infected by signature virus.
Alter_Ego
дрессированный кот

Рег.: 08.03.2004
Сообщений: 871
Рейтинг: 1320
  Re: [python] аналог requre_once из PHP [re: StepLg]
      12.08.2009 21:07
 

Файлов много, и весят они много?



основными отличительными чертами сбежавшего кота являются лень и обжорство.
StepLg
смотритель

Рег.: 26.11.2005
Сообщений: 350
Из: Москва
Рейтинг: 25
  Re: [python] аналог requre_once из PHP [re: Alter_Ego]
      12.08.2009 21:11
 

нет. файлов не много, весят минимально.

если уж уточнять - то это конфигурации для scons . Проблема заключается в том, что в базовой директории должен лежать конфиг, включающий в себя разные способы сбори, флаги и т.п.

в базовой директории присудствуют папки:
 * inc - с глобальными хидерами, которые должны быть доступны всем
 * src - в этой папке содержится куча под-проектов, в каждом из которых свой SConscript файл со специфичными настройками

При этом должна быть возможность прозрачно компилить все проекты (из базовой директории вызвать $ scons . ), либо же проекты по отдельности (из директории проекта $ scons . )

поэтому проблемы прозводительности не стоит. стоит только проблема удоства пользования. Как это сделать средставми scons я пока не нашел

Alter_Ego
дрессированный кот

Рег.: 08.03.2004
Сообщений: 871
Рейтинг: 1320
  Re: [python] аналог requre_once из PHP [re: StepLg]
      12.08.2009 21:32
 

у.. к сожалению с этой системой сборки не знаком

наверняка должна быть переменная запуска скунса, которая указывает где искать файлы основной конфигурации сборки

в cmake это, кажется, делается с флагом -С . не помню точно давно писал



основными отличительными чертами сбежавшего кота являются лень и обжорство.
yegor
old hand

Рег.: 17.05.2006
Сообщений: 876
Рейтинг: 815
  Re: [python] аналог requre_once из PHP [re: StepLg]
      13.08.2009 13:14
1

В ответ на:

Проблема заключается в том, что в базовой директории должен лежать конфиг, включающий в себя разные способы сбори, флаги и т.п.




Для этого в scons придумали environment-ы и их export/import.

SConstruct в корне делает environment, настраивает его: tool-ы грузит, аргументы командной строки обрабатывает, флаги компиляции выставляет, экспортирует его, а дальше SConscript-ом инклудит SConstruct-ы проектов.

SConstruct-ы проектов импортируют environment, добавляют в него свои target-ы. В результате scons собирает все, scons project1 собирает project1. При этом все собирается с одинаковыми настройками.

Чтобы scons из поддиректории проекта собирал проект, наверное, можно допилить SConstruct-ы проектов, чтобы они определяли, что их вызывают напрямую, и правильно это обрабатывали.



Пользователю все равно, в какой системе не разбираться.
StepLg
смотритель

Рег.: 26.11.2005
Сообщений: 350
Из: Москва
Рейтинг: 25
  Re: [python] аналог requre_once из PHP [re: yegor]
      13.08.2009 13:18
 

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

import/export меня как раз и смутил тем, что в этом случае SConscript подпроектов будет подразумевать, что их уже откуда-то вызывают.

надо поппробовать как-то определить, есть переменная в import или нет. и если нет - подгрузить дополнительный скрипт конфигурации из корня.

StepLg
смотритель

Рег.: 26.11.2005
Сообщений: 350
Из: Москва
Рейтинг: 25
  Re: [python] аналог requre_once из PHP [re: yegor]
      17.08.2009 16:14
 

не могу разобраться, как использовать конструкцию типа env.Sconscript ?

я пытаюсь сконфигурировать environment, а затем вызвать с заданными настройками Sconscript:

code:
env = DefaultEnvironment() env.Replace(CCLFAGS = '-DSOME') env.VariantDir('dist1', 'src', 0) env.SConscript('dist1/SConstruct')


StepLg
смотритель

Рег.: 26.11.2005
Сообщений: 350
Из: Москва
Рейтинг: 25
  Re: [python] аналог requre_once из PHP [re: StepLg]
      17.08.2009 16:35
 

попробовал сделать через экспорт/импорт. все равно не работает

Рутовый SConstruct:
code:
env = DefaultEnvironment() env.Replace(CCLFAGS = '-DSOME') VariantDir('dist2', 'src', 0) SConscript('dist2/SConstruct', exports='env')



src/SConstruct
code:
Import('env') env.Program('program', Glob('*.cpp'), LIBS=['log4cpp'])



StepLg
смотритель

Рег.: 26.11.2005
Сообщений: 350
Из: Москва
Рейтинг: 25
  Re: [python] аналог requre_once из PHP [re: StepLg]
      17.08.2009 16:40
 

хм.

а если рутовый SConstruct изменить так:

 
code:
env = Environment(CCFLAGS = '-DSOME') VariantDir('dist2', 'src', 0) SConscript('dist2/SConstruct', exports='env')

то все работает...

Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
1 зарегистрированных и 1 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в