我发现很多问题都有相同的错误,但没有一个解决我问题的实际原因,所以我发布了这个。我在我的(数字海洋)Linux 生产服务器中遇到了这个问题。
我在virtualenv中有python 3.5.2,在机器中有python2.7.12。我已经使用命令在 virtualenv 中安装了 djangorestframeworkpip install 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 吗?如果我这样做,它可能会破坏某些东西吗?
(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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句