我正在运行 Ubuntu LTS 并且在尝试执行我的一些 pip 安装内容时遇到错误,例如scrapy。这是我得到的错误:
Unable to execute gcc: No such file or directory
Error: command 'gcc' failed with exit status 1
Run Code Online (Sandbox Code Playgroud)
我正在 virtualenv 中安装 pip。我尝试使用以下命令安装 build Essentials,但仍然出现相同的错误:
apt-get -y install build-essential
Run Code Online (Sandbox Code Playgroud)
谁能帮我理解我哪里出错了?
编辑 - 更多信息:
ubuntu@ip-10-164-8-155:/var/log$ gcc -v
The program 'gcc' can be found in the following packages:
* gcc
* pentium-builder
Try: sudo apt-get install <selected package>
Run Code Online (Sandbox Code Playgroud) 我打算成立一个Python应用程序(Pyblosxom)我的服务器上,并考虑到其自身的运行它的virtualenv沙箱用--no-site-packages
。我希望这样的设置多年来可以轻松移植和维护。
但是,我只将 virtualenv 用于在本地重新创建某个服务器设置的开发环境,并且大多数关于 virtualenv 的来源似乎也提到了 virtualenv 用于这种用途。
从实时服务器上的 virtualenv 运行 Python 应用程序有什么缺点吗?
注意:至于设置的可移植性,我刚刚了解到--relocatable
需要在新软件包安装后运行的实验选项。即使我没有这样做,我想由于 pip,设置会非常便携。
我正在尝试将 django 安装到已经存在的 virtualenv。
按照此处pip-install 网站上列出的说明,我从 SSH 运行以下命令。
name@server:~$ . myenv.env/bin/activate
(myenv.env)nam@server:~$ pip install django
Run Code Online (Sandbox Code Playgroud)
但是在安装的底部,我看到了这个:
creating /usr/local/lib/python2.7/dist-packages/django
error: could not create '/usr/local/lib/python2.7/dist-packages/django': Permission denied
Run Code Online (Sandbox Code Playgroud)
看来它正在尝试将其安装到全局目录。我没有 sudo 权限。我在这里做错了吗?
更新: $PATH = /var/django/myenv.env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
我有一个通常使用以下命令运行的 python 脚本:
(environment) python run.py
Run Code Online (Sandbox Code Playgroud)
我想在开始时运行这个脚本。(我正在使用 ubuntu)这是我的服务:
[Unit]
Description=My Script Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我无法运行这个脚本,但我可以运行任何不在环境内部的脚本。如何在启动时运行 python 脚本(virtualenv)?
sudo systemctl status user_sent
? user_sent.service - Mail Service
Loaded: loaded (/lib/systemd/system/user_sent.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since xxxxx 16:30:20 MSK; 3s ago
Process: 3713 ExecStart=/usr/bin/python run.py (code=exited, status=200/CHDIR)
Main PID: 3713 (code=exited, status=200/CHDIR)
Run Code Online (Sandbox Code Playgroud) 我正在运行一个带有各种 Vassals 的 uwsgi Emperor,每个 Vassals 都为来自不同 virtualenv 的特定 Python 应用程序提供服务。由于 uwsgi 是用它自己的 Python 2.7 解释器编译的,因此尝试在其中使用带有 Python 3 的 virtualenv 会在 vassal.log 中产生以下错误:
ImportError: No module named site
Run Code Online (Sandbox Code Playgroud)
我相信这个错误的根源是 uwsgi 使用的是它内置的 Python 2.7 解释器,而它运行的 virtualenv 目录只支持 Python 3 解释器。事实上,当我使用另一个 uwsgi(只需将它安装pip install uwsgi
在同一个 virtualenv 中)时,错误就会消失。但是,我希望一个皇帝统治几个不同的 virtualenv,所以在每个虚拟环境中安装一个单独的 uwsgi 不是一种选择。
根据Stackoverflow 上的这个答案,解决这个问题的正确方法是使用不同的 Python 解释器编译 uwsgi 作为可加载模块。在我采用这种方法之前,我想知道如何配置我的 Vassals 以使用另一个解释器插件。
现在我有一个皇帝,它从我的 /etc/rc.local 启动,并具有以下设置:
[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log
Run Code Online (Sandbox Code Playgroud)
然后我有一堆 Vassals …
我想将 postgresql 与 django 一起使用,因此执行了以下操作:
sudo apt-get install libpq-dev python-dev
sudo apt-get update
workon myenv
sudo pip install psycopg2
Run Code Online (Sandbox Code Playgroud)
在settings.py
正确配置我之后,我运行
./manage.py syncdb
Run Code Online (Sandbox Code Playgroud)
但是会抛出异常:
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named psycopg2
Run Code Online (Sandbox Code Playgroud)
数据库配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'postgres',
'PASSWORD': 'password1234',
'HOST': 'localhost',
'PORT': '',
}
}
Run Code Online (Sandbox Code Playgroud) 我的 virtualenv + gunicorn 设置有一个奇怪的问题,只有当 gunicorn 通过 supervisord 启动时。我确实意识到这很可能是我的主管的问题,我将不胜感激任何有关寻求帮助的更好地方的反馈...
简而言之:当我从我的用户 shell 运行 gunicorn 时,在我的 virtualenv 中,一切都完美无缺。我能够访问我的 Django 项目的所有视图。
当系统启动时supervisord启动gunicorn时,一切正常。
但是,如果我必须终止 gunicorn_django 进程,或者如果我执行 supervisord 重新启动,一旦 gunicorn_django 重新启动,每个请求都会用奇怪的 Traceback 回答:
(...)
File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/db/__init__.py", line 77, in
connection = connections[DEFAULT_DB_ALIAS]
File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/db/utils.py", line 92, in __getitem__
backend = load_backend(db['ENGINE'])
File "/home/hc/prod/venv/lib/python2.6/site-packages/Django-1.2.5-py2.6.egg/django/db/utils.py", line 50, in load_backend
raise ImproperlyConfigured(error_msg)
TemplateSyntaxError: Caught ImproperlyConfigured while rendering: 'django.db.backends.postgresql_psycopg2' isn't an available database backend.
Try using django.db.backends.XXX, where XXX is one of:
'dummy', 'mysql', 'oracle', 'postgresql', 'postgresql_psycopg2', 'sqlite3'
Error …
Run Code Online (Sandbox Code Playgroud) 我使用一个简单的 hello world 程序在 virtualenv 中的本地主机上运行了 nginx + uWSGI ,但是当我用一个简单的 Flask 应用程序替换 hello world 时出现此错误:
File "./wsgi_configuration_module.py", line 1, in <module>
from flask import Flask
ImportError: No module named flask
unable to load app mountpoint
Run Code Online (Sandbox Code Playgroud)
这是烧瓶应用程序(wsgi_configuration_module.py):
from flask import Flask
application = Flask(__name__)
@application.route("/")
def hello():
return "hello world"
if __name__ == "__main__":
application.run()
Run Code Online (Sandbox Code Playgroud)
uWSGI 配置(app_conf.xml):
<uwsgi>
<socket>127.0.0.1:9001</socket>
<chdir>/srv/www/labs/application</chdir>
<pythonpath>/srv/www</pythonpath>
<module>wsgi_configuration_module</module>
<callable>application</callable>
<no-site>true</no-site>
</uwsgi>
Run Code Online (Sandbox Code Playgroud)
nginx配置:
server {
listen 80;
server_name localhost;
access_log /srv/www/labs/logs/access.log;
error_log /srv/www/labs/logs/error.log;
location / { …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从主管运行一系列 Python 应用程序。它在 Mac OSX 上运行良好,但是当我尝试在 Ubuntu 上运行相同的应用程序时,主管似乎没有激活 virtualenv,因此我的脚本抛出错误。
这是我的结构:
/home/user/Sites/my-site
- app.py
- venv
- supervisor.conf
Run Code Online (Sandbox Code Playgroud)
我的 supervisor.conf 文件如下所示:
[program:python-app]
autorestart = false
autostart = false
startsecs = 0
command = python app.py
startretries = 1
environment=PYTHONPATH="%(here)s"
[unix_http_server]
file = /tmp/supervisor.sock
[supervisord]
logfile = logs/supervisord.log
pidfile = logs/supervisord.pid
environment=PYTHONPATH="%(here)s"
[supervisorctl]
serverurl = unix:///tmp/supervisor.sock
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[unix_http_server]
username = supervisor_admin
password =
[inet_http_server]
username = supervisor_admin
password =
port = *:9001
Run Code Online (Sandbox Code Playgroud)
如何让主管在虚拟环境中运行 python 应用程序?
我正在尝试将 uWSGI 与虚拟环境一起使用,以便在其上使用 Trac 错误跟踪器。
我已经通过 pip 安装了系统范围的 uwsgi。
接下来,我在 virtualenv 中安装了 trac
$ virtualenv venv
$ . venv/bin/activate
$ pip install trac
Run Code Online (Sandbox Code Playgroud)
然后我编写了一个简单的 uWSGI 配置脚本:
[uwsgi]
master = true
processes = 1
socket = localhost:3032
home = /srv/http/trac/venv/
no-site = true
gid = www-data
uid = www-data
env = TRAC_ENV=/srv/http/trac/projects/my_project
module = trac.web.main:dispatch_request
Run Code Online (Sandbox Code Playgroud)
但是当我尝试启动它时,它失败了:
$ uwsgi --http :8000 --ini /etc/uwsgi/vassals-available/my_project.ini --gid www-data --uid www-data
...
Set PythonHome to /srv/http/trac/venv/
...
*** Operational MODE: single process ***
ImportError: No module …
Run Code Online (Sandbox Code Playgroud) 我创建了一个在 Ubuntu 实例重新启动时运行的脚本。
crontab -e
Run Code Online (Sandbox Code Playgroud)
然后将其添加到脚本中:
@reboot /home/ubuntu/startup.sh
Run Code Online (Sandbox Code Playgroud)
脚本如下所示:
#!/bin/bash
tmux new-session -d -s my_server
tmux send-keys -t my_server:0 ". /home/ubuntu/venv/bin/activate" C-m
tmux send-keys -t my_server:0 "cd ~/canonicaliser_api" C-m
tmux send-keys -t my_server:0 "git checkout new-schema" C-m
tmux send-keys -t my_server:0 "git pull" C-m
tmux send-keys -t my_server:0 "cd ~/canonicaliser_api/canonicaliser/workers" C-m
tmux send-keys -t my_server:0 "python person_worker.py" C-m
Run Code Online (Sandbox Code Playgroud)
重新启动后,我执行 atmux attach
以查看结果。
$ . /home/ubuntu/venv/bin/activate
cd ~/canonicaliser_api
(venv)$ (venv)$ git checkout new-schema
git pull
cd ~/canonicaliser_api/canonicaliser/workers
python person_worker.py
Already …
Run Code Online (Sandbox Code Playgroud) 我已经在我的 amazon linux 服务器上设置并测试了 celery,使用 mysql 作为消息后端,并且在直接运行程序时它工作正常。我的 python 项目和 celery 安装位于 virtualenv 中。但是,如果我尝试使用此处的脚本来守护 celery ,该程序将拒绝在后台运行。
我正在使用 CELERYD="/opt/apps/myenv/[celeryd 路径]" 将 celery 的 virtualenv 安装位置传递给配置文件中的守护程序,这等同于在启动 celeryd 时使用标志 --cmd。
脚本总是在启动工作节点 1 后停止并等待,就好像我是直接运行程序而不是对其进行守护程序一样。芹菜此时处于活动状态,但在我关闭终端窗口或按 ctrl-c 后停止。
我试过在没有 --cmd 的情况下运行它,它似乎在后台运行,但工作人员不会启动,并且调用 stop 会返回一个“未知实例”。
任何建议,将不胜感激。
我正在尝试virtualenv
以编程方式管理 Jenkins 服务器上每个作业的 Python 环境,通过共享库扩展实现,以根据每个作业激活环境。例如:
/vars/activateEnvironment.groovy
:
def call(String env = "/usr/local/etc/environments/jenkins-$JOB_NAME") {
sh """
mkdir ${env}
virtualenv ${env}
source ${env}/bin/activate
"""
}
Run Code Online (Sandbox Code Playgroud)
管道脚本,其中virtualenv-scripts
存储库包含上述文件:
@Library('virtualenv-scripts') _
pipeline {
agent any
stages {
stage("Test") {
steps {
activateEnvironment()
sh 'which pip'
sh 'echo \$PATH'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行此管道脚本,我得到以下输出:
[Pipeline] sh
[example-pipeline] Running shell script
+ echo /sbin:/usr/sbin:/bin:/usr/bin
/sbin:/usr/sbin:/bin:/usr/bin
[Pipeline] sh
[example-pipeline] Running shell script
+ which pip
/bin/pip
Run Code Online (Sandbox Code Playgroud)
我尝试使用此答案使 Jenkins 使用登录 shell,但这仍然会在每次 …
virtualenv ×13
python ×9
ubuntu ×3
uwsgi ×3
bash ×2
daemon ×2
django ×2
supervisord ×2
gcc ×1
gunicorn ×1
installation ×1
jenkins ×1
linux ×1
nginx ×1
packages ×1
pip ×1
postgresql ×1
systemd ×1
tmux ×1