Вопрос

Что ж, я хочу использовать Web2py, потому что это довольно хорошо ... Мне просто нужно изменить рабочий каталог на каталог, где все мои модули/библиотеки/приложения, чтобы я мог их использовать. Я хочу иметь возможность импортировать мою реальную программу, когда я использую интерфейс/приложения Web2py. Мне нужно сделать это вместо того, чтобы помещать все мои приложения и все такое в папку Web2py ... Я пытаюсь дать своей программе веб -фронт, не помещая программу в папку Web2py ... извините, если это трудно понять.

Это было полезно?

Решение

Os.chdir Позволяет изменить рабочий каталог ОС, но для ваших целей (позволяя импортировать кучу модулей и C, которые ограничены для жизни в каком -то странном месте), кажется, лучше добавить необходимые каталоги к Sys.path вместо.

Другие советы

В любой многопоточной программе Python (и не только Python) вы не должны использовать OS.CHDIR, и вы не должны менять SYS.Path, когда у вас работает более одного потока. Это небезопасно, потому что это влияет на другие потоки. Более того, вы не должны sys.path.append () в цикле, потому что он может взорваться.

Все веб-фреймворки многопоточные, а запросы выполняются в цикле. Некоторые веб-фреймворки не позволяют вам устанавливать/не устанавливать приложения без перезапуска веб-сервера, и, следовательно, если OS.CHDIR/SYS.PATH.Append выполняется только при запуске, то не возникает проблем.

В Web2py мы хотим иметь возможность устанавливать/удалять приложения без перезапуска веб -сервера. Мы хотим, чтобы приложения были очень динамичными (например, определяли модели на основе информации, предоставленной HTTP -запросом). Мы хотим, чтобы каждое приложение имела свои собственные модели папки, и мы хотим, чтобы мы хотим полного разделения между приложениями, чтобы, если два приложения должны были в разных версиях одного и того же модуля, они не конфликтовались друг с другом, поэтому мы предоставляем API для этого (запрос. , local_import).

Вы все еще можете использовать обычные OS.CHDIR и SYS.PATH.Append, но вы должны делать это за пределами потоков (и это не конкретная проблема Web2py). Вы можете использовать импорт везде, где вам нравится, как в любой другой программе Python.

Я настоятельно рекомендую перенести это обсуждение в список рассылки Web2py.

Я должен был сделать это. У меня мало модулей, которые я хотел использовать от своих контроллеров. Если вы хотите иметь возможность использовать код, который находится в каталоге модулей в контроллере, вы можете использовать:

# use this in your controller code
impname = local_import('module_in_modules', reload=True)
# reload true  will ensure that it will re load whenever
# there are changes to the module

Джая

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top