首页 > 解决方案 > 在不使用 .py 扩展名的情况下从不同的文件夹导入 python

问题描述

在不使用 .py 扩展名的情况下从不同的文件夹导入 python

下面是我调用python脚本(分发)的python脚本(feed_prg)

请注意,我的脚本位于不同的位置

feed_prg在位置 /opt/callscript

#!/usr/bin/env python

import sys
sys.dont_write_bytecode = True
sys.path.append('/home/username')
import distribute


# Main method start execution
def main(argv):
     something = 'some'
     distribute.feed(something)

if __name__ == "__main__":
        main(sys.argv[1:])

distribute在位置/home/username

#!/usr/bin/env python

import sys

def feed(something):
       print something

def main():
        something= "some"
        feed(something)

if __name__ == "__main__":
        main()

我在执行 ./feed_prg 时看到以下错误,并且仅当我的分发文件名只是分发而不是分发.py

Traceback (most recent call last):
  File "./feed_prg", line XX, in <module>
    import distribute
ImportError: No module named distribute

分发也有执行权限,如下

-rwxr-xr-x 1 username username 3028 Dec 16 21:05 distribute

我怎样才能解决这个问题。? 任何输入都会有所帮助

谢谢 !

标签: pythonpython-importpython-2.x

解决方案


直接使用是不可能的import。最好简单地将文件重命名为.py

importlib话虽如此,可以使用或imp取决于您的 Python 版本将模块加载到变量中。


给定路径中的以下文件./distribute(相对于运行 python 的位置):

# distribute

print("Imported!")
a_var = 5

蟒蛇2

# python2import

from imp import load_source

distribute = load_source("distribute", "./distribute")
print(distribute.a_var)

用法:

$ python python2import
Imported!
5

蟒蛇 3

#python3import

from importlib.machinery import SourceFileLoader

distribute = SourceFileLoader("distribute", "./distribute").load_module()
print(distribute.a_var)

用法:

$ python3 python3import
Imported!
5

推荐阅读