Найти - Пользователи
Полная версия: Импорт из родительской папки.
Начало » Python для новичков » Импорт из родительской папки.
1
plusplus
Есть у меня веб-приложение - папка web. И есть у меня скрипты, которые работают по крону, но импортируют некоторые файлы из папки web. Сейчас у меня такая структура:
/web
    /tools
        __init__.py
        some.py
    app.py
/bin
    run.py

и в коде run.py приходится писать:
sys.path.append(os.path.dirname(__file__) + "/../web/")
from tools.some import *

А как-нибудь можно организовать структуру проекта, чтобы sys.path редактировать не приходилось?
sergeek
добавить __init__.py в каталог web и
import web.tools.some
или не добавлять если python >= 3.3
sergeek
ну и общий для bin и web каталог должен быть в $PYTHONPATH
plusplus
sergeek
ну и общий для bin и web каталог должен быть в $PYTHONPATH
Как его туда добавить?
sergeek
записать в какой-нибудь .bashrc
export PYTHONPATH=$PYTHONPATH:/home/user/projects/
plusplus
Не знаю насколько это правильно, создал скрипт которые создает pth фал, указывающий на нужные мне директории:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import os
modules = ['web', 'parse_config']
setup_dir = os.path.dirname(os.path.realpath(__file__))
gottlieb_dir = os.path.abspath(setup_dir + '/../')
gottlieb_pth = os.path.join(setup_dir, 'gottlieb.pth')
fl = open(gottlieb_pth, 'w')
for module in modules:
    fl.write(os.path.join(gottlieb_dir, module)+'\n')
fl.close()
from distutils.core import setup
from distutils import sysconfig
site_packages_path = sysconfig.get_python_lib()
setup(
    name = "gottlieb",
    version = "0.1",
    description = "Reconfigure sys.path",
    data_files=[(site_packages_path, ["gottlieb.pth"])]
)
os.remove(gottlieb_pth)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB