0

我试图执行我在 Windows 中编写的程序,在 Linux 环境中,我一直在应该从子文件夹中导入文件的行上遇到错误。

该程序给出以下错误,

Traceback (most recent call last):
  File "BlackBox.py", line 26, in <module>
    from BB_Files import BB_Expand
ImportError: No module named BB_Files

尽管 BB_Files 文件夹中存在 BB_Expand 文件,但我仍然收到错误消息。

我还尝试在 Python 中附加当前目录的路径,

sys.path.append("/home/pe/Desktop/AES")
# Sub-Folders of AES are also accessible
sys.path.append("/home/pe/Desktop/AES/BB_Files")

但仍然没有运气,

这是文件结构,

/home/pe/Desktop/AES/Main.py
/home/pe/Desktop/AES/BB_Files
/home/pe/Desktop/AES/BB_Files/BB_Days.py
/home/pe/Desktop/AES/BB_Files/BB_Expand.py
/home/pe/Desktop/AES/BB_Files/BB_Steps.py 

这是ls -l命令的输出,

drwxrwx--x 4 pe users  4096 Oct 26 21:43 BB_Files
-rw-rw---- 1 pe users 15284 Oct 26 22:04 Main.py

这是文件中的一些初始代码,

import sys    # sys.argv ; sys.path, sys.exit
import os
import hashlib
import struct # Interpret strings as packed binary data
import getopt # for Runtime arguments
import time
from datetime import date

# Append Paths from where the Files would be Imported.
sys.path.append("/home/pe/Desktop/AES")
# Sub-Folders of AES are also accessible
sys.path.append("/home/pe/Desktop/AES/BB_Files")
# Sub-Fodlers of BB_Files are also accessible now (Tables)
from BB_Files import BB_Expand
from BB_Files import BB_Steps
from BB_Files import BB_Days

这是给出错误的行,

from BB_Files import BB_Expand

程序在这一行之后没有运行,因为 Python 找不到这个模块。

但是当我尝试打印当前目录的路径时,我什么也没得到,看看,

print("Path is:",os.path.dirname(__file__))
print("sufiyan")

输出:

('Path is:', '')
sufiyan
Traceback (most recent call last):
  File "BlackBox.py", line 25, in <module>
    from bbfiles import bbexpand
ImportError: No module named bbfiles

我想知道为什么在 Windows 中打印正常时没有打印路径。我得到的只是一个黑色空间,而不是当前目录的路径。

4

3 回答 3

1

显然下面这行会ImportError报错

from BB_Files import BB_Expand 
## if you comment this the next immediate line will give you same error

因为这是您第一次尝试从包中导入模块

所以,当你说

from <something> import <something-else>

意味着,您正在module/class/function从 a 导入 apackage/module

在您的情况下,它package可能是一个名为__init__.py要放置在您的目录中的文件,因此python会将目录视为一个包。

## try this to get your directory name
print __file__
print "Path is:", os.path.dirname(os.path.abspath(__file__))
于 2013-10-26T19:04:23.787 回答
0

尝试将__init__.py文件添加到两个目录。它不必包含任何东西,但它必须存在。当 Python 尝试加载模块目录时,它首先尝试加载此文件,因为它可以包含有关加载模块的附加指令(例如从正确文件导入平台相关代码的能力)。如果 Python 没有找到该文件,它可能不会将该目录视为 Python 模块并且无法从中导入文件。

在文档中阅读有关它的更多信息。

于 2013-10-26T18:42:26.553 回答
0

__init__.py在目录中添加一个名为的空文件/home/pe/Desktop/AES/BB_Files应该可以解决问题。阅读有关Python 文档的更多信息。

于 2013-10-26T18:42:48.133 回答