在pyCharm中使用sudo权限进行调试?

25

我已经通过运行sudo pycharm.sh测试了需要根访问权限的代码在pyCharm中的表现,但这不是我建议的做法。

我知道可以在pyCharm中以sudo身份运行python解释器来进行调试,但我们该如何做呢?


1
你最终解决了这个问题吗?如果我运行sudo pycharm.sh,PyCharm将被重新安装和重新配置... - Summer Sun
10个回答

9

8
抱歉,能否再详细介绍一下这个解决方案?我原以为你们是指shell脚本,但PyCharm似乎无法将其用作Python解释器。谢谢。 - bellum
@bellum,我已经修复了答案。 - rominf
2
PyCharm的信号丢失了...停止按钮不再起作用,你会得到僵尸。 - Adam Mills
你能告诉我如何创建一个shell脚本吗?我应该将它存储为.txt文件吗?并且应该将它存储在哪里? - Summer Sun
2
这里提供了一个完整的解决方案来解决一个问题:http://esmithy.net/2015/05/05/rundebug-as-root-in-pycharm/ - Anton Khodak
显示剩余3条评论

8
在 PyCharm 的新版本中,它有一个配置选项可以在 root 中运行 Python 解释器,无需解决问题。如下图所示,请勾选复选框:使用sudo以root权限执行代码。
请参考以下图片链接:enter image description here

10
遗憾的是,这仅适用于远程翻译员,而不适用于本地翻译员。 - VincBreaker
4
另一个令人沮丧的消息是,它显然已经从PyCharm 2022中删除了(我正在运行2022.3.1)。 - Alexandr Zarubkin
2
另一则令人悲伤的消息是,它显然已从PyCharm 2022中移除(我正在运行2022.3.1)。 - Alexandr Zarubkin

6
我通过将 /usr/bin/python3 复制到我的主目录中,并设置 cap_net_bind_service 权限,解决了这个问题。
cp /usr/bin/python3 ~/python35-setcap
sudo setcap 'cap_net_bind_service=+ep' ~/python35-setcap

然后在pycharm中使用~/python35-setcap作为Python解释器。

这样,您可以绑定较低的端口,但不是所有的Python 3程序都可以做到这一点,而且Pycharm仍然可以杀死您的脚本。如果您希望更安全,还可以限制自己的执行权限。


1
这确实是唯一可行的解决方案。如果您能够通过Linux Capabilities克服它,人们就会忘记关于shell脚本解决方案!Linux Capabilities已经专门设计用来解决这些问题。例如 - https://squidarth.com/networking/systems/rc/2018/05/28/using-raw-sockets.html - Evgen

5

值得一提的是,我成功地以sudo权限运行了一个python脚本(在Ubuntu 16.04上),步骤如下:

  1. 在脚本的第一行中,像这样定义解释器:

    #!/usr/bin/sudo python

  2. 将脚本设为可执行:

    chmod +x myscript.py

  3. 直接运行脚本,不要自己指定python解释器:

    ./myscript.py

  4. 脚本将会要求输入sudo密码,并以提高的权限继续运行。

4

我遇到了解决这个问题的另一种方法,所以想分享一下(这个答案更像是其他答案的替代方案)。

值得在这里提一下的是,这个解决方案通过仅在根模式下运行某个Python脚本(在PyCharm IDE内)来"攻击"这个问题,而不是整个PyCharm应用程序。

1) 禁用运行Python需要密码:

这可以通过编辑/etc/sudoers.d/python文件来实现。我们需要做的是在该文件中添加以下条目:

user host = (root) NOPASSWD: full_path_to_python,例如:

guya ubuntu = (root) NOPASSWD: /usr/bin/python

注意事项:

user 可以用以下命令检测到:whoami

host 可以用以下命令检测到:hostname

2) 创建一个“sudo脚本”:该脚本的目的是赋予Python以root用户身份运行的权限。

创建一个名为python-sudo.sh的脚本,并将以下内容添加到其中:

#!/bin/bash
sudo /usr/bin/python "$@"

请注意,路径是指前一阶段的 Python 路径。同时,这个路径是系统上 Python2 的路径。
不要忘记使用命令 chmod 为该脚本赋予执行权限。
chmod +x python-sudo.sh

3) 使用 python-sudo.sh 脚本作为您的 PyCharm 解释器:

在 PyCharm 中转到:文件 --> 设置 --> 项目解释器

在右上角点击 "设置" 图标,然后点击 "添加本地".

在浏览选项中选择我们之前创建的 python-sudo.sh 脚本。这将使 PyCharm 具有以 root 用户身份运行 Python 脚本的特权。

4) 调试测试: 唯一剩下的工作就是在 PyCharm IDE 中实际调试特定的 Python 脚本。这可以通过右键单击要调试的脚本,然后点击 调试sample_script_to_debug.py 进行简单完成。


4
我遇到了同样的问题,尝试在树莓派上调试与蓝牙相关的代码。我猜想,由于您正在对设备进行远程调试,因此该设备仅用于开发。在这种情况下,在我谦虚的意见中,您应该允许ssh root登录,以便您可以配置PyCharm使用root用户,而无需sudo。这是我选择的解决方案。
以下说明适用于树莓派,但任何Linux发行版的过程都相同:
首先,将您的公钥添加到authorized_keys中:
cat ~/.ssh/id_rsa.pub | ssh pi@raspberrypi "mkdir -p ~/.ssh && cat >> 
~/.ssh/authorized_keys"

接着登录树莓派:

ssh pi@raspberrypi

一旦您拥有控制台,请将密钥复制到root目录中:

sudo mkdir /root/.ssh
sudo cp authorized_keys /root/.ssh/

最后编辑 sshd_config 并添加 PermitRootLogin without-password:
sudo vim /etc/ssh/sshd_config

使用您喜欢的编辑器。

现在,您可以作为root用户ssh登录树莓派:

ssh root@raspberrypi

使用root用户代替pi用户,可以让你的代码以root权限运行,即使是远程执行,这是BlueZ所需要的。

3

如果你想要一种更简洁的解决方案,并且不介意每次输入密码,请按如下步骤进行:

进入运行配置(run configuration) > 编辑配置(Edit Configurations)

在“执行(Execution)”下,勾选在输出控制台中模拟终端(Emulate terminal in output console) 选项。

这将允许你在调试Python脚本时保持当前用户并在需要时将提升的sudo权限授予脚本。 这还使得在跨多个项目工作时更容易维护不同的虚拟环境。

enter image description here


2
不确定这是否解决了用户提出的问题。 - StanGeo
1
@StanGeo - 这个方法直接解决了问题,用户能够获得调试功能,并被提示输入sudo密码,而不必以sudo权限运行PyCharm并失去所有配置。你可以试试看。 - HyperionX
2
这似乎实际上没有做任何事情。仍然失败,因为它需要sudo/root访问权限,导致“操作不允许”。 - mc01

2

终端:

sudo ./Pycharm

这样,您就可以以超级用户身份启动PyCharm。

这是我亲测可行的唯一方法。其他答案确实有效,但它们更加繁琐且比仅作为root用户运行PyCharm更加永久化。对于需要超级用户权限的脚本进行一次性调试的情况,这是最佳选择。 - Jonathan E. Landrum

1

和 @Richard 指出的类似,这里发布的回答 链接 对我有用

sudo /Applications/PyCharm.app/Contents/MacOS/pycharm on MacOS

1
我按照这里的说明操作成功了。但是当使用sudo时,PYTHONPATH无效,所以在编辑时会出现问题。
sudo visudo -f /etc/sudoers.d/python

添加这个:

user host = (root) NOPASSWD:SETENV: /home/yizhao/anaconda3/bin/python

同时,你的脚本应该是:

#! /bin/bash
sudo PYTHONPATH=$PYTHONPATH /home/name/anaconda3/bin/python "$@"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接