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
|
|
|
В ответ на:
Проблема заключается в том, что в базовой директории должен лежать конфиг, включающий в себя разные способы сбори, флаги и т.п.
Для этого в 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')
то все работает...
|
|