• linux运行py文件,设置默认包搜索路径


    一、将写好的py文件上传到linux服务器上执行,报错

    [root@localhost tcp_check]# python3 TcpClient.py 
    Traceback (most recent call last):
      File "TcpClient.py", line 2, in <module>
        from util.Log import logger
    ModuleNotFoundError: No module named 'util'
    [root@localhost tcp_check]# 

    引用自定义的包文件失败,提示找不到模块

    需要查看或者设置PYTHONPATH环境变量,是否增加了上传需要引用的模块的绝对路径

    二、设置PYTHONPATH环境变量

    [root@localhost tcp_check]# echo 'export PYTHONPATH=/usr/local/zabbix/scripts'>>/etc/profile 
    [root@localhost tcp_check]# source /etc/profile
    [root@localhost tcp_check]# echo $PYTHONPATH  
    /usr/local/zabbix/scripts
    [root@localhost tcp_check]# 

    三、执行验证

    [root@localhost tcp_check]# python3 TcpClient.py 
    ['/usr/local/zabbix/scripts/hlsms/qxt/jk/tcp_check', '/usr/local/zabbix/scripts', '/usr/local/python3/lib/python37.zip', '/usr/local/python3/lib/python3.7', '/usr/local/python3/lib/python3.7/lib-dynload', '/usr/local/python3/lib/python3.7/site-packages', '/usr/local/zabbix/scripts']
    [root@localhost tcp_check]# 

    四、总结

    1、如果需要导入的包和导入包的文件在同一个目录下直接import即可

     例如b.py需要用a.py的某些代码就可以直接import

    2、如果导入的模块是在主程序所在目录的子目录下,可以在子目录中增加一个空白的__init__.py文件(或者pycham中直接在当前目录下新建一个package会自动生成__init__.py文件),该文件使得python解释器将子目录整个也当成一个模块,然后直接通过“import 子目录.模块”导入即可

     

    例如b.py需要用c.py的某些代码就可以直接import

    3.如果导入的模块是在主程序所在目录的父目录下,则要通过修改path来解决,有两种方法:

    (1)通过”import sys,sys.path.append(‘父目录的路径’)“来改变,这种方法属于一次性的,只对当前的python解释器进程有效,关掉python重启后就失效了。

    (2)直接修改环境变量:在windows中是 “ set 变量=‘路径’ ” 例如:set PYTHONPATH=‘C: est…’ 查看是否设置成功用echo %PYTHONPATH%,而且进到python解释器中查看sys.path,会发现已经有了新增加的路径了。这种方式是永久的,一次设置以后一直都有效。在linux中是 “export 变量=‘路径’ “,查看是” echo $变量 "

  • 相关阅读:
    PPT图片
    饥荒Steam相关mod代码
    Ubuntu20.04更换阿里源 source.list文件
    中断处理与进程调度的区别与联系
    原语和系统调用的区别
    立下个flag,这个月底之前要发一个深度学习入门系列的文章
    conda安装skimage
    机器学习入门(三)
    zip安装的MySQL绑定my.ini配置文件
    Anaconda配置安装
  • 原文地址:https://www.cnblogs.com/sky-cheng/p/15457155.html
Copyright © 2020-2023  润新知