无法在python中导入文件

时间:2018-06-22 00:24:44

标签: python

我已经编写了Python代码,该代码分为两个文件,即

record_1.py
record_2.py
record_3.py
record_4.py
main.py

所有这些文件都放在一个公共文件夹中:

/user/mario/python/sampletest

当我尝试在main.py中导入上述文件时,执行以下命令时出现错误:

$] python  main.py
ImportError: No module named record_1

下面是main.py代码:

import jaydebeapi
import record_1,record_2,record_3,record_4


def main():
def teradata_conn():
    try:
        conn_teradata = jaydebeapi.connect(jclassname='com.teradata.jdbc.TeraDriver',
                                           url="jdbc:teradata://10.10.10.10",
                                           driver_args=['@user','@pass'],
                                           jars=['/user/mario/python/jar/tdgssconfig.jar','/user/mario/python/jar/terajdbc4.jar'])
        print("Connection was successful")            
        record_1()
        record_2()
        record_3()
        record_4()

    except Exception as e:
        print(e)


if __name__ == '__main__':
    main()

任何帮助或建议都将受到高度赞赏。

import sys
print (repr(sys.path))


['', '/user/mario/anaconda2/lib/python27.zip', 
'/user/mario/anaconda2/lib/python2.7', 
'/user/mario/anaconda2/lib/python2.7/plat-darwin',
'/user/mario/anaconda2/lib/python2.7/plat-mac', 
'/user/mario/anaconda2/lib/python2.7/plat-mac/lib-scriptpackages', 
'/user/mario/anaconda2/lib/python2.7/lib-tk', 
'/user/mario/anaconda2/lib/python2.7/lib-old', 
'/user/mario/anaconda2/lib/python2.7/lib-dynload', 
'/user/mario/anaconda2/lib/python2.7/site-packages', 
'/user/mario/anaconda2/lib/python2.7/site-packages/aeosa', 
'/user/mario/anaconda2/lib/python2.7/site
packages/IPython/extensions', 
'/user/mario/.ipython']

3 个答案:

答案 0 :(得分:2)

(来自https://docs.python.org/2/library/sys.html#sys.path的信息):

要使import工作,模块所在的目录必须位于路径(sys.path)中。该路径将通常包括您正在运行的脚本所在的目录,但是如果Python无法确定该位置(例如,如果您执行{{1} })。在这种情况下,Python应该在路径中添加空字符串,即“当前目录”。

python <script.py的输出中可以看出,该脚本的运行方式阻止了Python知道其位置-Python在路径中的第一项中插入了空字符串“”,当您执行以下操作时:

print (repr(sys.path))

您的系统模块路径(... / anaconda2 / lib / ...)建议安装我不熟悉的Python。如果您实际上完全按照引用的命令来运行命令(python </usr/mario/python/sampletest/main.py -当当前目录是主目录和模块所在的位置时),它应该已经可以工作了-但是在安装中,python main.py命令可能是一些包装脚本,可以在运行将其弄乱的解释器之前更改目录或执行其他操作。

即使路径中没有python,但路径中有“”仍使Python在当前目录中查找模块。考虑到您遇到的故障,这意味着(在脚本启动时)当前目录不是"/usr/mario/python/sampletest"。如果不是模块目录,请查看/usr/mario/python/sampletest会给您的解释。

可能会解决此问题的解决方案,请根据需要进行选择:

  • 将脚本的完整路径提供给python,例如import os ; print (os.getcwd())
  • 在运行脚本时尝试确保当前目录为python /usr/mario/python/sampletest/main.py。也可以在其他导入之前使用/usr/mario/python/sampletest
  • 将PYTHONPATH变量设置为该目录(例如,如果您的shell是sh或bash:import os ; os.chdir("something")
  • 修改sys.path []以包含您的目录,例如sys.path.insert(0,“ your-modules-path”),如此处的另一个答案所示。

答案 1 :(得分:0)

我不是Python专家。我隐约记得遇到了这个问题,当我添加以下内容时,它起作用了。但是再次,我试图导入位于不同目录中的模块。

sys.path.insert(0,'/user/mario/python/sampletest')

答案 2 :(得分:-4)

在每个逗号后放置空格 例如导入file1,file2,file3