我正在使用 Ubuntu 16.04 LTS 。我已经python3安装了。安装了两个版本,python 3.4.3和python 3.6. 每当我使用python3命令时,它都会python 3.4.3默认使用。我想python 3.6与python3.
python3 --version 显示 version 3.4.3
我正在安装ansible支持version > 3.5. 所以,每当我在终端中输入 ansible 时,它都会抛出错误,因为python 3.4
sudo update-alternatives --config python3
update-alternatives: error: no alternatives for python3
Run Code Online (Sandbox Code Playgroud) 在 RHEL 6.6 上,我从源代码安装了 Python 3.5.1。我正在尝试通过 get-pip.py 安装 pip3,但我得到了
Traceback (most recent call last):
  File "get-pip.py", line 19177, in <module>
    main()
  File "get-pip.py", line 194, in main
    bootstrap(tmpdir=tmpdir)
  File "get-pip.py", line 82, in bootstrap
    import pip
zipimport.ZipImportError: can't decompress data; zlib not available
Run Code Online (Sandbox Code Playgroud)
它适用于安装的 Python 2.6.6。我在网上寻找答案,但似乎找不到适合我的答案。
编辑: yum search zlib
jzlib.i686 : JZlib re-implementation of zlib in pure Java
perl-Compress-Raw-Zlib.i686 : Low-Level Interface to the zlib compression library
perl-Compress-Zlib.i686 : A module providing Perl interfaces to the zlib compression library …Run Code Online (Sandbox Code Playgroud) 我通过运行 10 亿次循环来测试 Bash 和 Python 的速度。
$ cat python.py
#!/bin/python
# python v3.5
i=0;
while i<=1000000000:
    i=i+1;
Run Code Online (Sandbox Code Playgroud)
重击代码:
$ cat bash2.sh
#!/bin/bash
# bash v4.3
i=0
while [[ $i -le 1000000000 ]]
do
let i++
done
Run Code Online (Sandbox Code Playgroud)
使用该time命令,我发现 Python 代码只需要 48 秒即可完成,而 Bash 代码在我杀死脚本之前需要 1 个多小时。
为什么会这样?我预计 Bash 会更快。我的脚本有问题还是 Bash 使用这个脚本真的慢得多?
我相信这应该很简单,但我无法让它正常工作。
这些是我可以在命令行上运行的命令:
cd /home/debian/ap
# Start a virtualenv
source venv-ap/bin/activate
# This needs to happen inside the virtualenv and takes ~20 seconds
crossbar start
# Outside the virtualenv, perhaps in a different command line window
python3 /home/debian/myscript.py
Run Code Online (Sandbox Code Playgroud)
这些命令必须按此顺序执行。由于 virtualenv、不可执行的 crossbar 以及之后的单独 python 脚本,我一直无法找出使其工作的最佳方法。我目前正在进行的工作:
[Unit]
Description=Start CB
After=network.target
[Service]
Type=simple
User=debian
ExecStartPre=source /home/debian/ap/venv-ap/bin/activate
ExecStart=cd /home/debian/ap/ && crossbar start
Restart=always
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud) 根据这个答案,我执行了一系列先决条件设置以准备pip安装python3软件包。
然而,当我跑
python3 -m pip install psycopg2
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Downloading/unpacking psycopg2
  Downloading psycopg2-2.6.2.tar.gz (376kB): 376kB downloaded
  Running setup.py (path:/tmp/pip-build-1ocbvumt/psycopg2/setup.py) egg_info for package psycopg2
Installing collected packages: psycopg2
  Running setup.py install for psycopg2
    Skipping implicit fixer: buffer
    Skipping implicit fixer: idioms
    Skipping implicit fixer: set_literal
    Skipping implicit fixer: ws_comma
    building 'psycopg2._psycopg' extension
    gcc -pthread -Wno-unused-result -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -I/opt/rh/rh-python34/root/usr/include -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong …Run Code Online (Sandbox Code Playgroud) 我已经安装了 python3.7,但是我不确定如何使它成为默认的 python。
见下文:
~/Documents/robosuite$ python3.7
Python 3.7.1 (default, Oct 22 2018, 11:21:55) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
KeyboardInterrupt
>>> 
~/Documents/robosuite$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Run Code Online (Sandbox Code Playgroud)
我希望在使用命令时显示 python3.7 python3
我一直在尝试安装依赖于setuptools的Python模块,显然该模块是使用apt安装的。然而,它似乎是错误的版本,所以我尝试使用pip安装它,只是为了看看是否有任何变化(剧透:显然没有任何变化)。
以下之间有什么区别(如果有)?
pip3 install setuptools
Run Code Online (Sandbox Code Playgroud)
和:
apt install python3-setuptools
Run Code Online (Sandbox Code Playgroud) 我设置了一个 Anaconda Python 虚拟环境,如果我在激活该虚拟环境时运行我的项目,一切运行良好。
但是我有一个配置为每小时运行一次的 cronjob。我将输出通过管道传输到日志,因为它没有正确运行。
crontab -e:
10 * * * * bash /work/sql_server_etl/src/python/run_parallel_workflow.sh >> /home/etlservice/cronlog.log 2>&1
Run Code Online (Sandbox Code Playgroud)
我在 cronlog.log 中收到此错误:
Traceback (most recent call last):
  File "__parallel_workflow.py", line 10, in <module>
    import yaml
ImportError: No module named yaml
Run Code Online (Sandbox Code Playgroud)
这表明在没有激活虚拟环境的情况下,cronjob 以某种方式不运行文件。
为了解决这个问题,我在/home/user/.bash_profile文件中添加了一行:
conda activate ~/anaconda3/envs/sql_server_etl/
Run Code Online (Sandbox Code Playgroud)
现在,当我登录时,环境会自动激活。
但是,问题仍然存在。
我又尝试了一件事。我更改了 cronjob,(我也在 cronjob 运行的 bash 文件中尝试了这个)以在每次运行时明确手动激活环境,但无济于事:
10 * * * * conda activate ~/anaconda3/envs/sql_server_etl/ && bash /work/sql_server_etl/src/python/run_parallel_workflow.sh >> /home/etlservice/cronlog.log 2>&1
Run Code Online (Sandbox Code Playgroud)
当然,我试过的任何东西都没有修复它。我真的对 linux 一无所知,所以也许我需要改变一些明显的东西。
那么,无论如何要指定 cronjob 应该在虚拟环境下运行?
从 bluez 5.44 开始,包含在 bluez-utils(其中包括 hcitool)中的 rfcomm 二进制文件被认为已弃用,从现在开始只包含在 AUR 提供的 bluez-utils-compat 包中。
是否有类似的命令行应用程序使用 rfcomm 内核模块将蓝牙设备绑定到串行端口,或者从现在开始我是否必须使用 PyBluez 或类似的库?
如果碰巧是后者,您会推荐哪些 Python 3 库?
如果有人知道,请告诉我为什么这么多 bluez-utils 突然被认为已弃用。我找不到任何关于那件事的信息。
该ArchWiki建议使用新的执行RFCOMM功能d-Bus的配置文件1 API。
我需要将 python 版本从 3.8 更改为 3.6 ?我怎样才能在 Ubuntu 20.04 中实现这一点?pyenv global 3.6.0我尝试过 pyenv,但是当我尝试像那时一样使用 pyenv 时,python3我仍然有 3.8 版本。