【问题标题】:Run script within python package在 python 包中运行脚本
【发布时间】:2014-11-07 23:46:21
【问题描述】:

当模块不在我的 Python 路径中时,如何在模块内运行脚本?

考虑一些虚构的包:

package/
     __init__.py
    main.py
    helper/  
        __init__.py
        script.py
    other/  
        __init__.py
        anotherscript.py

假设我们要运行script.py。当包在我的 Python 路径中时,它就可以完成这项工作:

python -m package.helper.script

但如果不是这样呢?有没有办法告诉python模块的位置?类似的东西

python -m /path_to_my_package/package.helper.script

(显然,以上行不通)

编辑:

(1) 我正在寻找不涉及环境变量的解决方案。

(2) script.py 包含相对导入,所以script.py 的完整路径并不能解决问题。

【问题讨论】:

    标签: python package


    【解决方案1】:

    你可以这样做。我假设这是来自 cmd 提示符或批处理文件?

    SET PYTHONPATH=..\..\path\to\my\package;c:\other\path\thats\needed
    python -m package.helper.script
    

    您也可以只将完整路径传递给您的 python 文件。但这假设您的脚本不希望为其预设特定的环境路径。

    python -m path_to_my_package/package/helper/script.py
    

    编辑 - 如果您的 script.py 使用相对导入(并且您不想更改它),那么除了将该根路径获取到环境中之外,没有其他办法。如果需要,您可以在脚本中执行此操作,而不是在 cmd shell 或批处理文件中设置它。但它需要在某个地方完成。以下是在脚本中设置环境路径的方法:

    import sys
    sys.path.append(r'..\..\path\to\my\package')
    import package.other.anotherscript
    

    【讨论】:

    • 嗯,问题是是否可以不修改环境变量。第二个选项不是这种情况,因为 script.py 使用模块内它的父目录的相对导入。
    【解决方案2】:

    您的 script.py 应如下所示:

    #!/usr/bin/python
    
    #here your python code
    
    if __name__ == "__main__":
        #run you helper
    

    然后使您的脚本可执行:chmod +x script.py

    从控制台运行 ./path_to_my_package/package/helper/script.py。

    【讨论】:

    • 这行不通,因为我在 script.py 中使用了相对导入。必须作为模块的一部分运行
    猜你喜欢
    • 1970-01-01
    • 2023-01-08
    • 2014-07-25
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多