【发布时间】:2016-07-23 00:41:27
【问题描述】:
现在我得到了 following this 的相对导入。但是在使用错误的相对路径引用文件时出现了一些错误。
我的文件夹结构是这样的
spamfilter_app
├── Makefile
└── spamfilter
├── classifier
│ ├── classifierNB.py
│ ├── exceptions.py
│ ├── __init__.py
│ └── train.py
├── data
│ ├── corpus1
│ ├── corpus2
│ └── corpus3
├── __init__.py
├── logfiles
│ └── logfile.txt
└──run
├── __init__.py
└── test.py
它的绝对路径是/home/tasdik/Desktop/spamfilter_app
我的文件看起来像这样
test.py
from ..classifier.train import Trainer
CUR_DIR = os.path.abspath('.')
PARENT_DIR = os.path.abspath(os.path.join(CUR_DIR, os.path.pardir))
LOGGING_FILE = os.path.join(PARENT_DIR, 'logfiles', 'logfile.txt')
CORPUS_DIR = os.path.join(PARENT_DIR, 'data')
logging.basicConfig(
filename=LOGGING_FILE,
level = logging.DEBUG,
filemode = 'w',
format = '%(asctime)s - %(levelname)s - %(message)s'
)
train.py
from .classifierNB import NaiveBayesClassifier
CUR_DIR = os.path.abspath('.')
PARENT_DIR = os.path.abspath(os.path.join(CUR_DIR, os.path.pardir))
LOGGING_FILE = os.path.join(PARENT_DIR, 'logfiles', 'logfile.txt')
logging.basicConfig(
filename=LOGGING_FILE,
level = logging.DEBUG,
filemode = 'w',
format = '%(asctime)s - %(levelname)s - %(message)s'
)
classifierNB.py
CUR_DIR = os.path.abspath('.')
PARENT_DIR = os.path.abspath(os.path.join(CUR_DIR, os.path.pardir))
LOGGING_FILE = os.path.join(PARENT_DIR, 'logfiles', 'logfile.txt')
logging.basicConfig(
filename=LOGGING_FILE,
level=logging.DEBUG,
filemode='w',
format='%(asctime)s - %(levelname)s - %(message)s'
)
我得到的错误
当我从 spamfilter 父目录执行 $ python -m spamfilter.run.test 时,我收到此错误。这是回溯。
$ python -m spamfilter.run.test
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/tasdik/Desktop/spamfilter_app/spamfilter/run/test.py", line 18, in <module>
from ..classifier.train import Trainer
File "spamfilter/classifier/train.py", line 27, in <module>
from .classifierNB import NaiveBayesClassifier
File "spamfilter/classifier/classifierNB.py", line 43, in <module>
format='%(asctime)s - %(levelname)s - %(message)s'
File "/usr/lib/python2.7/logging/__init__.py", line 1540, in basicConfig
hdlr = FileHandler(filename, mode)
File "/usr/lib/python2.7/logging/__init__.py", line 911, in __init__
StreamHandler.__init__(self, self._open())
File "/usr/lib/python2.7/logging/__init__.py", line 936, in _open
stream = open(self.baseFilename, self.mode)
IOError: [Errno 2] No such file or directory: '/home/tasdik/Desktop/logfiles/logfile.txt'
logfile.txt 被赋予了错误的绝对路径。我尝试对logile.txt 的路径进行硬编码,但在访问语料库目录时遇到了同样的问题
谁能解释我哪里出错了?
编辑
按照建议,我通过添加将项目路径添加到sys路径
sys.path.append("/home/tasdik/Desktop/spamfilter_bad")
在每个提到的文件中。和进口一样
from spamfilter.classifier.classifierNB.py import NaiveBayesClassifier
我认为导入操作很好,但文件 logfile error still persists。
这是一个更新的错误回溯
$ python -m spamfilter.run.test
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/tasdik/Desktop/spamfilter_app/spamfilter/run/test.py", line 22, in <module>
from spamfilter.classifier.train import Trainer
File "spamfilter/classifier/train.py", line 30, in <module>
from spamfilter.classifier.classifierNB.py import NaiveBayesClassifier
File "spamfilter/classifier/classifierNB.py", line 46, in <module>
format='%(asctime)s - %(levelname)s - %(message)s'
File "/usr/lib/python2.7/logging/__init__.py", line 1540, in basicConfig
hdlr = FileHandler(filename, mode)
File "/usr/lib/python2.7/logging/__init__.py", line 911, in __init__
StreamHandler.__init__(self, self._open())
File "/usr/lib/python2.7/logging/__init__.py", line 936, in _open
stream = open(self.baseFilename, self.mode)
IOError: [Errno 2] No such file or directory: '/home/tasdik/Desktop/logfiles/logfile.txt'
【问题讨论】:
标签: python-2.7 python-import python-module