ubuntu下python环境变量配置以及将模块放入正确位置

本文介绍了如何查看Python的搜索路径,并提供了两种方法来扩展这些路径,包括配置PYTHONPATH环境变量及通过代码动态添加路径。

要想知道python的搜索路径有哪些,我们可以用以下代码来查看:

import sys,pprint
pprint.pprint(sys.path)
pprint输出的是python的搜索路径,python的解释器就是从这些路径中搜索我们所需的模块的。如果我们想让解释器能够搜索到我们自定义的模块的话,有以下两种方法:

一:配置PYTHONPATH环境变量

假设我们在ubuntu下有一个python文件夹,它的路径是~/python,我们将我们自定义的模块存放在该目录下面。若想导入里面的模块,我们就修改home下的.profile文件

gedit ~/.profile

在文件的最后一行输入添加以下代码

export PYTHONPATH=$PYTHONPATH:~/python

这样就将我们的python文件夹的路径加入到了PYTHONPATH。

在修改完.profile之后,我们用以下命令将文件重新加载一遍,就可以更新PYTHONPATH了。因为是修改的是/home目录下的.profile文件,所以这个更改只能对当前用户生效,换成其他用户就不行了。如果要所有用户都有效,可以修改/etc/bash.bashrc,操作同方法跟此方法相同,只是修改的文件变成/etc/bash.bashrc这个文件。


二:import导入

假设还是之前的python文件夹,我们在写Python程序时可以动态的导入该文件夹路径,导入其中的模块。

import sys
sys.path.append('~/.python')

这样我们就成功的将其导入到path了,不过这种方法是临时的

<think>我们正在解决如何在Ubuntu系统中设置开机自动运行Python程序的问题。根据引用[2][3][4][5]提供的几种方法,我们可以选择使用systemd服务或修改rc.local文件来实现。下面将详细介绍两种主流方法: ### 方法一:使用systemd服务(推荐) systemd是Ubuntu标准的服务管理工具,可以更可靠地管理自启动服务。 #### 步骤1:创建Python脚本 假设你的Python脚本位于`/path/to/your_script.py`,并确保它有可执行权限: ```bash chmod +x /path/to/your_script.py ``` #### 步骤2:创建systemd服务文件 在`/etc/systemd/system/`目录下创建服务文件,例如`my-python-script.service`: ```bash sudo nano /etc/systemd/system/my-python-script.service ``` 文件内容如下(根据引用[2][3][4]调整): ```ini [Unit] Description=My Python Startup Script # 服务描述 After=network.target # 确保在网络启动后运行[^3][^4] [Service] Type=simple User=your-username # 替换为你的用户名,如root或普通用户 WorkingDirectory=/path/to # 替换为脚本所在目录 ExecStart=/usr/bin/python3 /path/to/your_script.py # 使用绝对路径 Restart=always # 脚本崩溃时自动重启[^2][^3] RestartSec=3 # 重启等待时间[^4] StandardOutput=syslog # 可选:输出到系统日志 StandardError=syslog # 可选:错误输出到系统日志 [Install] WantedBy=multi-user.target # 多用户环境启动[^2][^3] ``` #### 步骤3:启用并启动服务 ```bash # 重新加载systemd配置 sudo systemctl daemon-reload # 启用开机自启动 sudo systemctl enable my-python-script.service # 立即启动服务 sudo systemctl start my-python-script.service ``` #### 步骤4:检查服务状态 ```bash sudo systemctl status my-python-script.service ``` 查看日志(引用[3]): ```bash journalctl -u my-python-script.service -f ``` ### 方法二:使用rc.local(传统方法,适用于简单脚本) 适用于不需要复杂管理的脚本(引用[5])。 #### 步骤1:编辑rc.local文件 ```bash sudo nano /etc/rc.local ``` 在`exit 0`之前添加启动命令(使用绝对路径): ```bash #!/bin/bash ... # 运行Python脚本(后台运行避免阻塞) /usr/bin/python3 /path/to/your_script.py & exit 0 ``` #### 步骤2:赋予rc.local可执行权限 ```bash sudo chmod +x /etc/rc.local ``` #### 步骤3:重启测试 ```bash sudo reboot ``` ### 两种方法对比 | 特性 | systemd服务 | rc.local | |---------------|---------------------------|------------------------| | 日志管理 | 完善(可集成syslog) | 需手动重定向 | | 崩溃重启 | 支持 | 不支持 | | 依赖控制 | 可设置After/Requires | 无 | | 权限管理 | 可指定User/Group | 默认root | | 适用场景 | 生产环境/长期运行服务 | 简单临时任务 | ### 注意事项 1. **Python路径**:使用`which python3`确认解释器路径[^3]。 2. **脚本权限**:确保运行用户有脚本执行权限。 3. **环境变量**:如果脚本依赖环境变量,可在`[Service]`部分添加`Environment`指令(如`Environment="PATH=/usr/bin:/bin"`)[^2]。 4. **后台运行**:Python脚本如果是持续运行程序(如含`while True`),无需额外处理;若为单次执行,考虑使用`&`放入后台(rc.local中必须)[^5]。 ### 示例:守护进程型Python脚本 若需脚本持续运行(如监控程序),参考以下结构: ```python import time def main(): while True: # 你的主逻辑 time.sleep(60) # 避免CPU占用过高 if __name__ == '__main__': main() ``` ### 常见问题解决 - **服务启动失败**:检查`journalctl -xe`查看详细错误。 - **权限拒绝**:检查服务文件的`User`和文件权限。 - **网络未就绪**:添加`After=network-online.target`和`Wants=network-online.target`[^4]。 通过以上方法,你的Python程序将在Ubuntu开机时自动运行。推荐优先使用systemd方式,因其功能更完善且易于维护。 §§相关问题§§ 1. 如何让Python脚本在崩溃后自动重启? 2. 如何查看systemd服务的实时日志? 3. 如何设置Python脚本以特定用户身份运行? 4. 在Ubuntu中,systemd服务和crontab的`@reboot`有何区别?</think>### 在Ubuntu中设置开机自动运行Python程序的完整指南 以下是两种主流方法,推荐使用 **systemd服务方式**(更现代可靠): --- #### 方法一:使用systemd服务(推荐⭐) 这是Ubuntu的标准服务管理方式,支持崩溃重启和日志监控。 1. **创建Python脚本** 确保脚本有可执行权限: ```bash chmod +x /path/to/your_script.py ``` 2. **创建systemd服务文件** ```bash sudo nano /etc/systemd/system/my-python.service ``` 添加以下内容(根据引用[2][3][4]调整): ```ini [Unit] Description=My Python Startup Script After=network.target # 确保网络就绪后启动[^4] [Service] Type=simple User=your_username # 替换为实际用户名(如pi/ubuntu/root) WorkingDirectory=/path/to/script # 脚本所在目录 ExecStart=/usr/bin/python3 /path/to/your_script.py # 使用绝对路径 Restart=always # 崩溃时自动重启[^2][^3] RestartSec=5 # 重启间隔(秒)[^4] StandardOutput=syslog # 输出到系统日志 StandardError=syslog # 错误信息到日志 [Install] WantedBy=multi-user.target # 多用户模式启动 ``` 3. **启用并启动服务** ```bash # 重载配置 sudo systemctl daemon-reload # 设置开机自启 sudo systemctl enable my-python.service # 立即启动服务 sudo systemctl start my-python.service ``` 4. **验证服务状态** ```bash # 查看运行状态 sudo systemctl status my-python.service # 查看实时日志(推荐) journalctl -u my-python.service -f ``` --- #### 方法二:使用rc.local(传统方式) 适用于简单脚本(引用[5]),但功能有限: ```bash sudo nano /etc/rc.local ``` 在 `exit 0` 前添加: ```bash # 后台运行Python脚本(使用绝对路径) /usr/bin/python3 /path/to/your_script.py & ``` 赋予可执行权限: ```bash sudo chmod +x /etc/rc.local ``` --- ### 关键注意事项 1. **路径问题** - 所有路径必须使用**绝对路径** - 查询Python解释器路径:`which python3` - 工作目录(WorkingDirectory)需显式声明 2. **权限管理** - 普通用户脚本用 `User=username` - 系统级脚本用 `User=root` - 确保用户对脚本有执行权限 3. **依赖处理** 若需等待其他服务(如数据库): ```ini [Unit] After=postgresql.service # 在PostgreSQL后启动 Requires=postgresql.service # 依赖此服务 ``` 4. **日志调试** 在Python脚本中添加日志模块: ```python import logging logging.basicConfig(filename='/var/log/myapp.log', level=logging.INFO) ``` --- ### 两种方法对比 | 特性 | systemd服务 | rc.local | |--------------|---------------------------------|------------------------| | 崩溃重启 | ✅ 支持 | ❌ 不支持 | | 日志管理 | ✅ 完善(journalctl) | ❌ 需手动重定向 | | 启动顺序控制 | ✅ 精细(After/Requires) | ❌ 无 | | 权限控制 | ✅ 支持指定用户 | ❌ 默认root | | 适用场景 | 生产环境/长期运行服务 | 简单临时任务 | > 实测推荐:对于需要持续运行的服务(如Web API、数据采集),**systemd是首选方案**,其崩溃重启机制可显著提高稳定性[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值