【问题标题】:Import python from different folder without using .py extension在不使用 .py 扩展名的情况下从不同的文件夹导入 python
【发布时间】:2019-12-16 21:26:42
【问题描述】:

不使用 .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

distribute也有执行权限,如下

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

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

谢谢!

【问题讨论】:

    标签: python python-import python-2.x


    【解决方案1】:

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

    话虽如此,根据您的 Python 版本,可以使用 importlibimp 将模块加载到变量中。


    给定路径./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
    

    【讨论】:

    • 让我试试,虽然我们使用的是旧版本的 Python (Python 2.6.6)
    猜你喜欢
    • 2011-09-23
    • 2016-07-30
    • 2013-08-22
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多