【问题标题】:Installing a packaged Django app results in failed "migrate" error "no module named..."安装打包的 Django 应用程序导致失败的“迁移”错误“没有名为...的模块”
【发布时间】:2017-06-03 04:00:18
【问题描述】:

Ubuntu 16.04 LTS • nginx 1.10.0 • Python 2.7.12 • Django-1.10.5

我已经完成了https://docs.djangoproject.com/en/1.10/intro/tutorial07/ 的教程,这些教程都是使用 virtualenv 构建的

要学习打包我的应用并重用它,我正在学习https://docs.djangoproject.com/en/1.10/intro/reusable-apps/ 上的教程,它不使用 virtualenv,但 我无法让它工作强>。

该应用程序称为“民意调查”。以下是我创建包时所做的:

  1. 删除了我的应用程序中留下的所有 .pyc 文件

  2. pip install setuptools & sudo pip install django

  3. 将我的(正常运行的)应用程序目录从项目目录移动到我的主目录

    ~$ mv -rfp 示例/民意调查 django-polls

  4. 在新的“django-polls”文件夹中,我创建了 README.rstLICENSE,并通过修改了 setup.py p>

注释掉:

\#'Programming Language :: Python :: 3',
\#'Programming Language :: Python :: 3.4',
\#'Programming Language :: Python :: 3.5',
  1. 创建 MANIFEST.in(无文档)

  2. 构建包,没有问题:python setup.py sdist

到目前为止,一切似乎都正常运行。

我想在其他站点重新使用我的应用程序,但安装后无法完成迁移。

我安装了没有明显问题的新包:

pip install --user django-polls/dist/django-polls-0.1.tar.gz

为了完成安装,我:

  1. 在 settings.py 中将“投票”添加到 INSTALLED_APPS,在不同的站点/项目文件夹中

  2. 通过添加修改urls.py

    url(r'^polls/', include('polls.urls')),

  3. python manage.py 迁移

现在我得到一个错误:

File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named polls

我想:也许是因为我使用 --user 标志安装了投票,它对 virtualenv 不可用,所以我“工作”了 virtualenv 并重新安装投票:

pip install django-polls/dist/django-polls-0.1.tar.gz

一切正常,但是当我尝试迁移时遇到同样的错误:

File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named polls

所以,我无法让我的应用在 virtualenv 中运行。

要获取投票的路径,我输入:

pip uninstall polls

并得到“无法卸载需求投票,未安装”

如果我在 virtualenv 中或者我已停用它,结果都是一样的。

为了检查安装位置,我尝试使用和不使用 virtualenv 重新安装应用程序并获取:

Requirement already satisfied: pip in ./.local/lib/python2.7/site-packages

Requirement already satisfied: pip in ./Env/myenvironment/lib/python2.7/site-packages

所以该应用程序安装在 virtualenv 内部和外部,但是当我进行迁移时它都丢失了。

我花了一整天的时间尝试各种不同的路径和其他类似教程,但无法超越这一点。

【问题讨论】:

    标签: django nginx virtualenv pythonpath python-packaging


    【解决方案1】:

    当我根据教程创建应用程序时,我将所有正在工作的应用程序文件移动到新的应用程序文件夹中,将它们保留在他们的文件夹中(~$ mv -rfp example/在上面的问题中投票 django-polls)。

    换句话说,我已经移动了以下内容:

    ~/sitename/polls
    

    直接到:

    ~/django-polls
    

    我应该把它移到什么时候:

    ~/django-polls/polls
    

    这是错误的,我需要保留文件夹中的所有内容:

    ~$ cd ~/django-polls
    ~$ mv -f ../sitename/polls ./
    

    最后,为了让应用程序正常工作,我需要在 virtualenv 中工作时安装应用程序, 没有 --user 标志。

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 1970-01-01
      • 2014-01-18
      • 2017-09-17
      • 2016-12-18
      • 1970-01-01
      • 2013-02-16
      • 2014-02-08
      • 2017-11-09
      相关资源
      最近更新 更多