我想在启动时从虚拟环境启动 Python 脚本。我搜索了整个论坛和其他来源,但无法让它工作。
该脚本应在脚本目录中作为工作目录运行,并且启动该脚本的终端应保持可见。
我主要使用了“启动应用程序”和 ~/user/.config/autostart 中 .desktop 文件的不同配置
我曾尝试运行可自行运行的 shell 文件,如下所示:
[Desktop Entry]
Type=Application
Terminal=true
Exec=/home/user/autostart.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=True
Name=autostart_shell
Comment=
.sh 文件
#!/usr/bin/env bash
sleep 10
cd /home/user/environment
bin/python3 main.py
bash
或者类似的东西
#!/usr/bin/env bash
sleep 10
cd /home/user/environment
source bin/activate
python3 main.py
bash
然而环境从未被激活。
我也尝试过其他 .desktop 配置,如下所示,但没有成功
[Desktop Entry]
Type=Application
Path=/home/user/env/
Terminal=true
Exec=gnome-terminal --command 'bash -ec "sleep 10;cd /home/user/env;source bin/activate;python3 main.py;bash"'
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
我已经花了一天的大部分时间在这上面却没有任何成功,有人有什么想法吗?
更新 好的,经过进一步的工作,问题就与激活虚拟环境有关。
我正在使用“启动应用程序”来运行 shell 脚本。我尝试了 gnome-terminal 和 xterm,结果相同。以下是 *.desktop 作业中的命令
gnome-terminal --command '/home/user/folder/startup.sh'
和
xterm /home/user/folder/startup.sh
shell 脚本如下:
#!/bin/bash
# Give it some time to make sure everything is loaded
sleep 5
# Logging to make sure it is run
TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`
echo "$TIMESTAMP - program was run " >> /home/user/folder/log.txt
# Switching working directory
cd /home/user/folder
# Alternative 1
# Run python script with virtual envirnments python binary
/home/user/folder/bin/python3 /home/user/folder/main.py
# Alternative 2
# Activate environment and then run
source /home/user/folder/bin/activate
python3 /home/user/folder/main.py
# Keep the terminal open
bash
在启动和登录时,终端已启动,但显示有关缺少模块的 Python 错误。如果 shell 脚本独立运行,则不会出现问题,但从“启动应用程序”启动则不会出现问题。
这让我很困扰,难道真的无法在 python 虚拟环境中启动终端吗?
答案1
您必须将.sh 文件更改为:
#!/usr/bin/env bash
sleep 10
cd /home/user/environment
/usr/bin/python3 main.py
bash
您在 bin/python3 之前漏掉了一个斜杠,并且 python 未安装在 /bin 目录中,而是安装在 /usr/bin 目录中
$ whereis python3
python3: /usr/bin/python3.8 /usr/bin/python3.8-config /usr/bin/python3 /usr/lib/python3.8 /usr/lib/python3.6 /usr/lib/python3 /etc/python3.8 /etc/python3.6 /etc/python3 /usr/local/lib/python3.8 /usr/local/lib/python3.6 /usr/include/python3.8 /usr/share/python3 /usr/share/man/man1/python3.1.gz