我发现许多问题都具有相同的错误,但是没有一个问题能够解决我的问题的实际原因,因此我将其发布了。我在(数字海洋)Linux生产服务器中遇到了这个问题。
我在virtualenv中具有python 3.5.2,在计算机中具有python2.7.12。
我已经使用命令pip install djangorestframework
在virtualenv中安装了djangorestframework
但未将其安装在实际计算机上(2.7版)
venv中的python3正在运行,并且可以正常导入rest_framework:
(venv) myname@server:/www/site$ python
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import rest_framework
>>> exit()
计算机中的python2正在运行,并且由于未安装而未导入rest_framework。
myname@server:/www/site$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import rest_framework
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named rest_framework
>>> exit()
在virtualenv中运行collectstatic命令时,出现以下错误。似乎是在python2.7中寻找软件包,而不是在virtualenv内部寻找。
(venv) myname@server:/www/site$ sudo python manage.py collectstatic
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 341, in execute
django.setup()
File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 85, in populate
app_config = AppConfig.create(entry)
File "/usr/local/lib/python2.7/dist-packages/django/apps/config.py", line 90, in create
module = import_module(entry)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named rest_framework
我的要求是,该软件包是否也必须存在于venv之外的服务器计算机中? 如果是这样,为什么?并且我应该在py2.7的服务器上安装rest_framework吗?如果这样做,是否有可能破坏某些东西?
答案 0 :(得分:0)
(venv)myname @ server:/ www / site $ sudo python manage.py collectstatic
问题在于此处使用sudo
。它放弃了使用目标帐户的环境,因此放弃了您的虚拟环境。
如果要保留它,则可能应使用-E
标志来保存环境:
(venv) myname@server:/www/site$ sudo -E python manage.py collectstatic
您也可以直接调用虚拟环境的python,这将使您不必预先设置可视环境:
(venv) myname@server:/www/site$ which python
<path-to-python>
(venv) myname@server:/www/site$ sudo <path-to-python> manage.py collectstatic