Linux python3使用自定义包

最近用pycharm开发完了一些项目部署到树莓派上做测试的时候跑不起来,发现报错找不到自定义模块,记录下解决办法;

 

环境:

linux Debian

python3.7

 

由于我的树莓派上没有删除python2.7,是3.7和2.7共存的,启动python3.7我的命令是python3,只有一个版本的python环境就不用带指定版本号之类的了。

 

原理:

python启动会自动扫描sys.path路径下相关文件,文件夹中带有__init__.py的文件夹会被python认为是包,由于只会扫描指定路径下的文件夹,所以在其他地方存放的包,python不会认为他是有效的包,所以在import的时候会导入失败报错找不到模块 

使用自定义模块方法有两种:

1、直接在sys.path路径中添加自定义包路径

2、新建一个pth结尾的文件,把自定义包的路径放入到这个文件中,而这个文件也是需要放到系统指定的路径下

其实两种方法原理都是在python自动扫描的路径下添加自定义包的路径让python能扫描到,只是实现方式不一样而已

 

具体操作

第一种:

1、启动python,例:python3

2、查看系统扫描路径:

     import sys

     sys.path

3、以上操作可以看到系统自动扫描的路径,在这里添加自己的路径,例:

     我的包名是getinfo,路径是/app/uswgi/getinfo, 这里的getinfo文件夹不能直接放入,需要放入的路径是/app/uwsgi/,然后  python会自动扫到该路径下的自定义包

添加方式:sys.path.append('/app/uwsgi/')

移除方式:sys.path.remove('/app/uwsgi/')

 

 

第二种:

在site-packages路径下新建带有自定义包路径的.pth文件

site-packages文件夹是python安装的时候创建的文件夹,python会自动扫描该文件夹下的内容

步骤:

1、找到site-packages文件夹:

python3

from distutils.sysconfig import get_python_lib

print(get_python_lib())
显示结果:/usr/lib/python3/dist-packages

其实该路径在第一种方式sys.path的时候就有记录,例如我的:

 sys.path
['', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/dist-packages', '/usr/lib/python3/dist-packages', '/app/uswgi/']

 

所以site-packages文件夹在我这树莓派上是叫做dist-packages,在该路径下新建带有自定义包路径的pth文件即可

 

对比:

其实两种方法都是一样的,第一种添加速度快,不需要找各种文件夹路径,第二种方便后期扩展,可以在文件内写入多个地址,看个人选择

你可能感兴趣的:(python)