我最近在 ubuntu 14.04 上安装了 opencv3。我遵循的教程出于某种原因使用了 virtualenv。现在我想将 opencv 从虚拟环境移至我的全局环境。原因是我似乎无法使用安装在我的全局环境中的软件包,这让我感到不安。那么我该怎么做呢?
我正在尝试让 Flask + SocketIO 应用程序在虚拟环境中的 Ubuntu 16.04 上作为服务运行。我的服务器每天凌晨 3 点重新启动(超出我的控制范围),因此我需要它在启动时自动启动。
单独运行脚本效果很好:
$ python main.py
(29539) wsgi starting up on http://127.0.0.1:8081
Run Code Online (Sandbox Code Playgroud)
我可以说它正在工作,因为它正在提供页面(通过按照Stack Overflow 答案设置的 nginx 服务器,尽管我认为这不相关。)
这是我的/etc/systemd/system/opendc.service:
[Unit]
Description=OpenDC flask + socketio service
[Service]
Environment=PYTHON_HOME=/var/www/opendc.ewi.tudelft.nl/web-server/venv
Environment=PATH=$VIRTUAL_ENV/bin:$PATH
ExecStart=/var/www/opendc.ewi.tudelft.nl/web-server main.py
Restart=always
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
所以当我尝试使用以下方法来实现这一点时:
$ sudo systemctl daemon-reload
$ sudo systemctl restart opendc
Run Code Online (Sandbox Code Playgroud)
它不再提供页面服务。状态显示:
$ sudo systemctl status opendc
* opendc.service - OpenDC flask + socketio service
Loaded: loaded (/etc/systemd/system/opendc.service; enabled; vendor preset: enabled)
Active: inactive (dead) (Result: exit-code) …Run Code Online (Sandbox Code Playgroud) 我的操作系统 (Arch Linux) 最近将 Python 从 3.5.2 更新到 3.6.0,现在运行任何终端时我都会收到以下消息:
/usr/bin/python: Error while finding module specification for 'virtualenvwrapper.hook_loader' (ModuleNotFoundError: No module named 'virtualenvwrapper')
virtualenvwrapper.sh: There was a problem running the initialization hooks.
If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.
Run Code Online (Sandbox Code Playgroud)
此外我得到这些输出
$ whereis python
python: /usr/bin/python3.6 /usr/bin/python3.6m /usr/bin/python3.6-config /usr/bin/python3.6m-config /usr/bin/python2.7-config /usr/bin/python /usr/bin/python2.7 /usr/lib/python3.6 /usr/lib/python3.5 /usr/lib/python2.7 /usr/include/python3.6m /usr/include/python2.7 /usr/share/man/man1/python.1.gz
$ which python
/usr/bin/python
$ python --version
Python 3.6.0 …Run Code Online (Sandbox Code Playgroud) 我已经在 Ubuntu 16.04 上安装了 virtualenv 和 virtualenvwrapper 我创建了一个名为 env1 的环境
$ sudo apt-get install python-pip
$ pip install virtualenv
$ pip install --upgrade pip
$ pip install virtualenvwrapper
$ export WORKON_HOME=~/Envs
$ mkdir -p $WORKON_HOME
$ source /usr/local/bin/virtualenvwrapper.sh
$ mkvirtualenv env1
Run Code Online (Sandbox Code Playgroud)
进入 (env1) 后,我已经安装了几个软件包
(env1) $ pip install numpy
(env1) $ pip install scipy
(env1) $ pip install matplotlib
(env1) $ apt-get install python-tk
Run Code Online (Sandbox Code Playgroud)
我还安装了opencv3(我没有复制如何安装,因为太长了)
我正在将 env1 用于特定项目。
现在我想使用相同的包启动另一个项目,但我还想添加其他包。
我已经创建了 env2,我想知道是否可以将 env1 复制到 env2,而不需要从头开始重新安装所有内容。
使用 virtualenv 我可以通过 th 选项将 python 版本设置为特定的虚拟环境-p。这意味着对于不同的环境我可以设置不同的 python 版本。virtualenvwrapper 是否有类似的可能性?请注意,我不想设置在所有虚拟环境中使用的系统范围版本。我希望能够灵活地在虚拟环境级别设置 python 版本。
我的项目存储在 OneDrive 上。有时它可以在我的电脑和笔记本电脑上运行,两者都装有 Windows 10。两者上的项目位于同一目录中-C:/OneDrive/code/etc...
当我使用 virtualenv 并下载不同的软件包时,它工作正常,但当我使用我的笔记本电脑时,根本不起作用(反之亦然)。我收到以下错误:
无法导入 runpy 模块导入错误:
没有名为“runpy”的模块
我该如何解决我的笔记本电脑和 PC 上的此问题?有人遇到过类似的问题吗?
所以我使用 python 3 和 jupyter (使用 pip)设置了虚拟局域网。一切正常,但如果我尝试导入 keras,它将无法在 jupyter 中工作并告诉模块未找到。但是如果我在终端中执行相同的文件(python3 test.py),它就可以正常工作。
which jupyter
/usr/local/bin/jupyter
which python3
/Users/niro273/Desktop/xcorp/bin/python3
Run Code Online (Sandbox Code Playgroud)
如果我这样做,pip3 list这些就是结果。
jupyter (1.0.0)
jupyter-client (5.1.0)
jupyter-console (5.2.0)
jupyter-core (4.3.0)
Keras (2.0.8)
Run Code Online (Sandbox Code Playgroud)
注意-我也在虚拟环境中安装了 jupyter (pip3 install jupyter)。那么我是否必须切换 juypter 执行路径?将不胜感激任何指导。
我的 gradle.build 文件中有以下 exec 命令。
exec {
workingDir System.getProperty("user.dir")
commandLine 'python3.6', 'buildscript.py'
}
exec {
workingDir System.getProperty("user.dir")
commandLine 'python3.6', '-m', 'virtualenv', 'env'
}
exec {
workingDir System.getProperty("user.dir")
commandLine 'source', 'env/bin/activate'
}
exec {
workingDir System.getProperty("user.dir")
commandLine 'pip3.6', 'install', 'pybuilder'
}
exec {
workingDir System.getProperty("user.dir")
commandLine 'pyb', '-E', 'env', '-X'
}
Run Code Online (Sandbox Code Playgroud)
这些都在执行 gradle build 时运行的构建任务中。理论上,这应该运行我创建的一个脚本,该脚本创建构建我的 python 程序所需的所有文件,然后它应该创建一个虚拟环境,激活它,在其中安装 pybuilder,然后运行 pybuilder。然而,命令:
exec {
workingDir System.getProperty("user.dir")
commandLine 'source', 'env/bin/activate'
}
Run Code Online (Sandbox Code Playgroud)
看来是失败了 它声称该目录/文件不存在,尽管它通过命令行工作。我不知道为什么会这样。这样做的全部目的是强制 Pybuilder 将我的程序依赖项安装到我创建的虚拟环境中。pyb -E env 从技术上讲应该为我激活虚拟环境,但无论出于何种原因,它都没有将我的依赖项安装到该虚拟环境。在我们的 Jenkins 节点上,这是一个问题,因为我们不希望它们全局安装,更不用说,我无论如何都没有 root 用户权限。
任何帮助将不胜感激。如果您知道另一种让 Pybuilder 正常工作的方法,那就同样好。
我正在设置一台新服务器,作为该过程的一部分,我设置了 Gunicorn 来提供 Web 文件服务。但是,传输数据时,在旧服务器上有效的命令在该服务器上不起作用。
Gunicorn master 进程似乎启动了工作进程,但工作进程由于“无法识别的参数”而立即退出。命令是:/home/postgres/venv/bin/gunicorn [app]:app。这与之前的服务器相同,只是该服务器使用 virtualenv 而不是全局包。我怀疑这可能是问题所在,但我不确定为什么或如何解决它。
相同的Python版本,但gunicorn版本较新(旧版为19.4.5,新版为19.9.0)。
我已将应用程序名称替换为 [app] 以防止混淆,但名称中没有无效字符或任何内容。
日志:
root@ns500738:/home/postgres/[app]# /home/postgres/venv/bin/gunicorn [app]:app
[2018-07-18 13:27:56 -0400] [10080] [INFO] Starting gunicorn 19.9.0
[2018-07-18 13:27:56 -0400] [10080] [INFO] Listening at: http://127.0.0.1:8000 (10080)
[2018-07-18 13:27:56 -0400] [10080] [INFO] Using worker: sync
[2018-07-18 13:27:56 -0400] [10083] [INFO] Booting worker with pid: 10083
usage: gunicorn [-h] [-c]
gunicorn: error: unrecognized arguments: [app]:app
[2018-07-18 13:27:56 -0400] [10083] [INFO] Worker exiting (pid: 10083)
[2018-07-18 13:27:56 -0400] [10085] …Run Code Online (Sandbox Code Playgroud) 我曾经3.8-dev安装过Python pyenv,但后来我卸载了这个版本。现在我只3.7.5安装在我的机器上。pyenv versions结果:
现在我相信全球默认也是3.7.5。然而,当我使用 NeoVim 或 Vim 打开 python 文件时,它仍然从底部栏显示,Python 3.8.1 64-bit尽管我相信我在这台机器上根本没有该版本。知道为什么会发生这种情况吗?我相信这是因为 Vim 仍然认为我有该3.8.1版本,但不知道如何修复它。谢谢!
Vim v8.1
NeoVim v0.4.3