我使用的是 Mac OS X 版本 10.13.1,我刚刚安装了 anaconda。我已经使用命令创建了一个虚拟环境
conda create -n py3 python=3
Run Code Online (Sandbox Code Playgroud)
然后,我使用命令启动了 python 解释器
python
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,来自 /usr/bin 的预装 python 2.7 出现了,而不是 python 3.6。为了检查出了什么问题,我发出了命令
which python
Run Code Online (Sandbox Code Playgroud)
结果更令人惊讶,我得到了以下信息:
/Users/karlstroetmann/anaconda2/envs/py3/bin/python
Run Code Online (Sandbox Code Playgroud)
当我然后调用命令时
/Users/karldrstroetmann/anaconda2/envs/py3/bin/python
Run Code Online (Sandbox Code Playgroud)
我确实得到了 python 3.6.3。但我不明白为什么我不能通过键入python. 我在这里缺少什么?任何提示将不胜感激。
我在各种情况下都会收到以下错误,例如当我尝试启动未安装的软件包时:
$ tldr
Traceback (most recent call last):
File "/usr/lib/command-not-found", line 28, in <module>
from CommandNotFound import CommandNotFound
File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
from CommandNotFound.db.db import SqliteDatabase
File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
from apport.report import Report
File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
import apport.fileutils
File "/usr/lib/python3/dist-packages/apport/fileutils.py", …Run Code Online (Sandbox Code Playgroud) 我写了一个 python 脚本,我想在屏幕内启动
screen -d -m /usr/bin/python3 /home/kermit/active-climateMngr.py
Run Code Online (Sandbox Code Playgroud)
它在命令行上工作得很好,但是当我尝试在 systemd 作为服务启动它时,没有任何屏幕会话启动。
.服务配置:
[Unit]
Description=Test Service
After=multi-user.target
Conflicts=getty@tty1.service
[Service]
Type=simple
ExecStart=/usr/bin/screen -d -m /usr/bin/python3 /home/kermit/active-climateMngr.py
StandardInput=tty-force
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
系统:
kermit@minnow:~ $ sudo service active-climateMngr.py status
? active-climateMngr.py.service - Test Service
Loaded: loaded (/lib/systemd/system/active-climateMngr.py.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Sat 2021-02-20 08:58:46 CST; 4min 7s ago
Process: 14373 ExecStart=/usr/bin/screen -d -m /usr/bin/python3 /home/kermit/active-climateMngr.py (code=exited, status=0/SUCCESS)
Main PID: 14373 (code=exited, status=0/SUCCESS)
Feb 20 08:58:46 minnow.coinz.com systemd[1]: Started Test Service.
Feb …Run Code Online (Sandbox Code Playgroud) 我已经在 Centos 7.4 机器上安装了 Python 3.6,并且需要 SQLite 的更新版本(我正在使用一些新功能)。它附带的 SQLite 版本非常旧:3.7.17。
这是怎么做到的?在 Windows 上,将 Python\DLLs 目录中的 sqlite.dll 文件替换为所需的文件很简单,但我没有找到如何在 Linux 上执行此操作的信息。
我可以看到这个问题之前有人问过,但没有回答 - /sf/ask/2734513071/ - 这是我唯一的页面谷歌搜索;大多数其他结果是 Python 2/pysqlite,这对我没有帮助。
那么,如何在 CentOS 机器上更新 Python 使用的 SQLite 版本呢?
我的 Debian 测试系统的最新更新删除了 Python 版本 2,我只安装了 Python 3,带有python3. 不再有任何名为python. 这会导致多个脚本失败,包括与 Python 3 兼容的脚本。
我很想知道什么是全局配置python为python3.
一种肮脏的解决方案是手动执行类似的操作sudo ln -s /usr/bin/python{3,},但我担心这对未来的 APT 更新(或者如果稍后重新安装 Python 2)可能不健壮。另一种选择是设置别名,但它只适用于我的用户,而不适用于整个系统。
我还注意到,在 Ubuntu 上有一个软件包python-is-python3可以做到这一点,但在 Debian 上没有这样的软件包。
我的家庭网络图很简单,如下所示:
internet --> Optical modem --> router --> pc1 ,pc2
111.111.111.111--> 192.168.1.1 -->192.168.31.1 --> 192.168.31.144,192.168.31.173
Run Code Online (Sandbox Code Playgroud)
ISP提供一个静态ip,假设它是111.111.111.111,光调制解调器的ip地址是192.168.1.1,路由器的ip地址是192.168.31.1,pc1的ip地址是,pc2的192.168.31.144ip地址是192.168.31.173,pc1的mac地址xx.xx.xx.xx。
该openwrt是我的路由器上运行,将在路由器和防火墙开放某个端口转发规则:
forwarding rule
name protocl outer port inner IP address inner port
wakeonwan UDP 9 192.168.31.144 9
ssh TCP and UDP 10000 192.168.31.1 22
Run Code Online (Sandbox Code Playgroud)
并在openwrt中绑定ip地址和mac:
ip address mac interface
192.168.31.144 xx.xx.xx.xx ??
Run Code Online (Sandbox Code Playgroud)
从以下选项中选择哪个界面?
远程登录我的路由器:
ssh root@111.111.111.111 -p 10000
Run Code Online (Sandbox Code Playgroud)
从路由器发出 wol 命令:
/usr/bin/wol -i 192.168.31.255 xx.xx.xx.xx
Run Code Online (Sandbox Code Playgroud)
pc1 可以从路由器唤醒!
关闭 pc1,使用以下 python …
在 RHEL 8.3 系统上,我安装了两个 python3 版本,当我列出替代版本时,它们显示为版本:
$ alternatives --display python3
/usr/bin/python3.6 - priority 1000000
slave easy_install-3: /usr/bin/easy_install-3.6
slave pip-3: /usr/bin/pip-3.6
slave pip3: /usr/bin/pip3.6
slave pydoc-3: /usr/bin/pydoc3.6
slave pydoc3: /usr/bin/pydoc3.6
slave pyvenv-3: /usr/bin/pyvenv-3.6
slave python3-man: /usr/share/man/man1/python3.6.1.gz
/usr/bin/python3.9 - priority 3900
slave easy_install-3: /usr/bin/easy_install-3.9
slave pip-3: /usr/bin/pip-3.9
slave pip3: /usr/bin/pip3.9
slave pydoc-3: /usr/bin/pydoc3.9
slave pydoc3: /usr/bin/pydoc3.9
slave pyvenv-3: (null)
slave python3-man: /usr/share/man/man1/python3.9.1.gz
Current `best' version is /usr/bin/python3.6.
Run Code Online (Sandbox Code Playgroud)
如何使用该alternatives命令选择已列出的python3.9已使用版本?python3.9(即,当我在命令行上键入时,我想在系统范围内执行python3)。
注意:我知道我可以添加一个新版本alternatives --install …
尝试在 Ubuntu 18.04 上安装 python 3.7 时
我收到如下错误消息:
zipimport.ZipImportError: 无法解压数据;zlib 不可用
或者
ModuleNotFoundError: 没有名为“_ctypes”的模块
或者
~/.pyenv/plugins/python-build/bin/python-build: line 775: make: command not found
或者
配置:错误:在 $PATH 中找不到可接受的 C 编译器
pcmanfm我正在尝试获取这样的processID :
pgrep -f "pcmanfm"
Run Code Online (Sandbox Code Playgroud)
当pcmanfm不运行时,上面的命令不会返回任何内容(正如我所期望的那样)。
但是,当我从 python 运行命令时,即使pcmanfm未运行,它也会返回进程 ID:
processID = os.system('pgrep -f "pcmanfm"')
Run Code Online (Sandbox Code Playgroud)
此外,如果您在 python3 提示符下多次运行上述命令,它每次都会返回不同的 processID。一直以来,pcmanfm在这些命令之前已经关闭。
>>> processID = os.system('pgrep -f "pcmanfm"')
17412
>>> processID = os.system('pgrep -f "pcmanfm"')
17414
>>> processID = os.system('pgrep -f "pcmanfm"')
17416
Run Code Online (Sandbox Code Playgroud)
pcmanfm如果它当前没有运行,这确实会扰乱我的启动能力。我的脚本认为它正在运行,但实际上它没有运行。
为什么会发生这种情况?
实际上,我在尝试根据我观看的视频编写的自动键脚本中遇到了这个问题。这是我当前的脚本:
processID = system.exec_command('pgrep -f "pcmanfm" | head -1',True)
dialog.info_dialog("info",processID)
if (processID):
cmd = "wmctrl -lp | grep " + processID + " | awk '{print $1}'" …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的文件,是用 Python 计算的:
1.00000100e+07
1.00000000e+04
1.11000111e+08
1.11000000e+05
Run Code Online (Sandbox Code Playgroud)
现在,我想获得这样的东西:
010000010
000010000
111000111
000111000
Run Code Online (Sandbox Code Playgroud)
我的想法是添加零以获得 9 位的固定格式。我编写的 Python 代码为我提供了二进制数,但为了进一步解码,我需要这些二进制数有 9 位。我尝试从 Python 中以所需的格式获取它们,但我无法做到这一点。
我希望我的解释很清楚。
更新:
Python代码:
#!/usr/bin/env python3
import numpy as np
from numpy import genfromtxt
import os
day = os.environ.get('day')
Array = genfromtxt("SUC_diffzeros_"+str(day)+".csv")
final = np.zeros(len(Array))
def decimaltobinary(x):
for i in range(len(x)):
print(x[i])
final[i] = "{0:09b}".format(x[i])
print(final)
var = np.column_stack([Array, final])
np.savetxt("SUC_diffzeros_"+str(day)+".csv", var, fmt='%.8e')
if __name__ == '__main__':
val = Array.astype(int)
decimaltobinary(val)
Run Code Online (Sandbox Code Playgroud)