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

Import python from different folder without using .py extension

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

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

请注意我的脚本在不同的位置

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 时看到以下错误,并且仅当我的分发文件名只是分发而不是 distribute.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

我该如何解决这个问题。 ?任何输入都会有所帮助

谢谢!

无法直接使用 import 执行此操作。最好将文件重命名为 .py

也就是说,可以使用 importlibimp 将模块加载到变量中,具体取决于您的 Python 版本。


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

# distribute

print("Imported!")
a_var = 5

Python 2

# python2import

from imp import load_source

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

用法:

$ python python2import
Imported!
5

Python 3

#python3import

from importlib.machinery import SourceFileLoader

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

用法:

$ python3 python3import
Imported!
5