我无法导入文件,但文件夹中的其他文件可以

时间:2018-11-07 08:47:42

标签: python python-2.x

从昨天开始,我在导入时遇到了问题。
我不明白我需要编辑的代码如何导入。

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 :(得分:0)

好的,经过几次研究,我解决了我的问题。

当我启动服务器时,程序将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,而另一个文件也无法执行该操作。 / p>

为解决此问题,我将以下代码添加到server/src/save_in_database.py

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