Tishka17
Просто берешь и импортируешь
Максим
Никогда не трогай руками sys.path
поясню, sys.path здесь - просто переменная среды
Максим
на винде по крайней мере
Максим
если ты меняешь переменные в рантайме - то ничего страшного
Максим
разве нет?
I
Ну допустим у меня есть директория сервисов и там свои "модули" и их импортировать без прописи директории 'service' в sys.path наверно не получится
I
Или я не прав?
Alex
нужно иметь нормальную структуру проекта
Максим
не прав
поведайте, же
Максим
если мне приходит запрос с python модулем и мне нужно его поковырять, повыполнять
Максим
как мне структурировать проект так, чтобы этого достичь
Alex
во-первых в sys.path попадает каталог в котором лежит запускаемый файл
Tishka17
если ты меняешь переменные в рантайме - то ничего страшного
Обычно это означает, что ты делаешь что-то не то
Alex
во-вторых ты оформляешь свой проект в виде пакета, описываешь setup.py и ставишь в develop режиме.
Alex
и он у тебя становится доступен из sys.path со ссылкой на дерево исходников
Alex
Что приходит?
фриланс приходит
Максим
import service.module?
Я запускаю проект через celery. В интерактивном интерпретаторе в текущей директории все нормально импортится. Я просто делаю import exp.example. А воркеры celery не имеют дериктории проекта в path
koder
если ты меняешь переменные в рантайме - то ничего страшного
пропущенно важное слово "глобальные"
Максим
и приходится вручную добавлять
Tishka17
Тогда не понимаю откуда проблема
Alex
он лежит в той же дериктории
показывай структуру проекта и как запускаешь
Максим
Тогда не понимаю откуда проблема
потому что когда celery запускает воркер он не содержит правильную директорию в path
Tishka17
Ты пока первый кто жалуется на celery в таком ключе
Максим
| .gitignore | config.py | controller.py | LICENSE | README.md | runner.py | \---exps example.py __init__.py
Максим
показывай структуру проекта и как запускаешь
root@ubuntu:~/ad-farm# celery -A runner.app worker -n runner --loglevel=DEBUG
Alex
root@ubuntu:~/ad-farm# celery -A runner.app worker -n runner --loglevel=DEBUG
заодно добавь print(sys.path) и покажи вывод
Alex
тут есть одна интересная бага в celery, возможно это она
Максим
foo = importlib.import_module("exps." + foobar)
Максим
потому что оно по другому не работает
Максим
скажите мне как по другому и я исправлю
Tishka17
Просто from exps import foobar?
Максим
но мои попытки были тщетны
Максим
нужно программно
Tishka17
Я бы ещё инит в exps глянул
Tishka17
Там пусто
У тебя в exps нет foobar, с чего этому коду вообще работать?
Tishka17
Вижу только example
Максим
foobar="example"
Максим
и все
Alex
извращение какое
Alex
залей свой код куда-нибудь на гитхаб, минимальный пример воспроизводящий проблему
Максим
Мне от клиента прилетает файл, в котором есть функция do, которую мне нужно выполнять и получать значение, которое она вернула
Tishka17
Ух
Alex
> Мне от клиента прилетает файл, в котором есть функция do, ох пипец
Tishka17
а что не так?
Просто рискованно
Максим
Так проще
Максим
Просто рискованно
это закрытый проект
Максим
который используется в командных нуждах
Alex
а что не так?
да вообще идея выполнять рандомный код который тебе откуда-то прилетает порочна по-определению
Максим
А файл в какой папке?
созраняется в exps
Tishka17
это закрытый проект
Да пожалуйста. Если комп без сети в отдельной комнате, ок
Tishka17
созраняется в exps
Тогда непонятно что не работает. Показывай ошибку импорта
Максим
потому что скорее всего он будет написан мной и моими друзьями
Максим
Подписи?
нет, потому что у юзеров нет намерения что-то сломать
Alex
кстати а ты случайно не грузишь все эти файлы под одним и тем же именем?
Alex
хохмы ради
Максим
там есть один example