Я не могу импортировать файл, но другой файл в папке может - PullRequest
0 голосов
/ 07 ноября 2018

Со вчерашнего дня у меня проблема с импортом.
Я не понимаю, как работает импорт кода, который мне нужно отредактировать.

config.py находится в корневой папке проекта, и здесь запускается сервер.

В server/src/session.py мы можем найти это

#!/usr/bin/env python
# -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil; coding: utf-8; -*-
# vim:set ft=python ts=4 sw=4 sts=4 autoindent:

'''docstring'''

from __future__ import with_statement

from Cookie import CookieError, SimpleCookie
from atexit import register as atexit_register
from datetime import datetime, timedelta
from hashlib import sha224
from os import makedirs, remove
from os.path import exists, dirname, join as path_join, isfile
from shutil import copy
from shutil import move
from tempfile import mkstemp

try:
    from cPickle import dump as pickle_dump, load as pickle_load
except ImportError:
    from pickle import dump as pickle_dump, load as pickle_load

from config import WORK_DIR

Последний импорт странный, так как server/src/config.py нет, файл config.py находится в корне папки проекта.
Итак, почему он может импортировать конфиг здесь?

когда я пытаюсь сделать то же самое в моем файле server/src/save_in_database.py:

import MySQLdb
import os
from config import DB_HOST, DB_USER, DB_PASS

Я получил ошибку импорта:

Traceback (most recent call last):
  File "server/src/save_in_database.py", line 4, in <module>
    from config import DB_HOST, DB_USER, DB_PASS
ImportError: No module named config

И когда я пытаюсь импортировать файл session в свой файл server/src/save_in_database.py, я получаю сообщение об ошибке, но в другом файле он работает отлично.

Traceback (most recent call last):
  File "server/src/save_in_database.py", line 3, in <module>
    from session import get_session
  File "/home/etienne/ed-labelisator/back/server/src/session.py", line 32, in <module>
    from config import WORK_DIR
ImportError: No module named config

Я не понимаю, как оригинальный программист импортировать, если кто-то может мне помочь.
Спасибо и извините за плохой английский

1 Ответ

0 голосов
/ 07 ноября 2018

Хорошо, после нескольких исследований я решил свою проблему.

когда я запускаю сервер, программа добавляет src / server к пути python:

sys.path.append(os.path.join(os.path.dirname(__file__), 'server/src'))

Итак, . И ./src/server можно импортировать, поэтому он работает для него.


И я, когда я делаю python2 server/src/save_in_database.py, каталог . не добавляется в python pah, поэтому я не могу импортировать config, а другой файл тоже не может этого сделать.

Для исправления этого я добавил следующий код в server/src/save_in_database.py

if __name__ == '__main__':
    import sys
    sys.path.append(os.path.join(os.path.dirname(__file__), '../..'))
...