我试图在Linux环境中执行我在Windows中编写的程序, 我一直在应该从子文件夹导入文件的行上出错。
程序出现以下错误,
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中打印时没有打印路径。 我得到的只是一个黑色空间而不是当前目录的路径。
答案 0 :(得分: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
package/module
在你的情况下,它是一个package
,可能是一个名为__init__.py
的文件放在你的目录中,所以python
会将该目录视为一个包。
## try this to get your directory name
print __file__
print "Path is:", os.path.dirname(os.path.abspath(__file__))
答案 1 :(得分:0)
尝试将__init__.py
文件添加到两个目录中。它不必包含任何东西,但它必须存在。
当Python尝试加载模块目录时,它首先尝试加载此文件,因为它可以包含有关加载模块的其他指令(例如从正确的文件导入与平台相关的代码的能力)。如果Python没有找到该文件,它可能不会将该目录视为Python模块,并且无法从中导入文件。
在documentation中了解更多相关信息。
答案 2 :(得分:0)
在__init__.py
目录中添加名为/home/pe/Desktop/AES/BB_Files
的空文件可以解决问题。详细了解Python Docs。