启动时在虚拟环境中运行 python 脚本

启动时在虚拟环境中运行 python 脚本

我想在启动时从虚拟环境启动 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

相关内容