Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Apache/Django:ImportError:没有名为';我的大学项目&x27;_Python_Django_Apache_Mod Wsgi_Wsgi - Fatal编程技术网

Python Apache/Django:ImportError:没有名为';我的大学项目&x27;

Python Apache/Django:ImportError:没有名为';我的大学项目&x27;,python,django,apache,mod-wsgi,wsgi,Python,Django,Apache,Mod Wsgi,Wsgi,尝试使用apache2和mod_wsgi托管我的django项目。我尝试了各种配置,但在浏览器中访问站点时不断出现导入错误,例如: Traceback (most recent call last): File "/home/user/projects/my_projectMain/my_project/my_project/wsgi.py", line 19, in <module> application = get_wsgi_application() File

尝试使用apache2和mod_wsgi托管我的django项目。我尝试了各种配置,但在浏览器中访问站点时不断出现导入错误,例如:

Traceback (most recent call last):
  File "/home/user/projects/my_projectMain/my_project/my_project/wsgi.py", line 19, in <module>
    application = get_wsgi_application()
  File "/usr/local/lib/python3.4/dist-packages/django/core/wsgi.py", line 13, in get_wsgi_application
    django.setup(set_prefix=False)
  File "/usr/local/lib/python3.4/dist-packages/django/__init__.py", line 22, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 53, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 41, in _setup
    self._wrapped = Settings(settings_module)
  File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 97, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2212, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
ImportError: No module named 'my_project'
wsgi.py:

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")

application = get_wsgi_application()
/etc/apache2/sites available/000-default.conf:

...
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html    

Alias /static /home/user/projects/my_projectMain/my_project/static
        <Directory /home/user/projects/my_projectMain/my_project/static>
            Require all granted
        </Directory>

        <Directory /home/user/projects/my_projectMain/my_project/my_project>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>

        WSGIDaemonProcess my_project python-path=/home/user/projects python-home=/home/user/projects/my_projectMain/my_projectEnv
        WSGIProcessGroup my_project
        WSGIScriptAlias / /home/user/projects/my_projectMain/my_project/my_project/wsgi.py
...
...
WSGIDaemonProcess my_project python-path=/home/user/my_projectMain/my_project/my_project python-home=/home/user/my_projectMain/venv
WSGIProcessGroup my_project
WSGIScriptAlias / /home/user/my_projectMain/my_project/my_project/wsgi.py
...
我得到:

 Traceback (most recent call last):
   File "/home/user/projects/my_projectMain/my_project/my_project/wsgi.py", line 25, in <module>
     application = get_wsgi_application()
   File "/usr/local/lib/python3.4/dist-packages/django/core/wsgi.py", line 13, in get_wsgi_application
     django.setup(set_prefix=False)
   File "/usr/local/lib/python3.4/dist-packages/django/__init__.py", line 27, in setup
     apps.populate(settings.INSTALLED_APPS)
   File "/usr/local/lib/python3.4/dist-packages/django/apps/registry.py", line 85, in populate
     app_config = AppConfig.create(entry)
   File "/usr/local/lib/python3.4/dist-packages/django/apps/config.py", line 90, in create
     module = import_module(entry)
   File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
     return _bootstrap._gcd_import(name[level:], package, level)
   File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
   File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
   File "<frozen importlib._bootstrap>", line 2224, in _find_and_load_unlocked
 ImportError: No module named 'django_static_jquery'
回溯(最近一次呼叫最后一次):
文件“/home/user/projects/my_projectMain/my_project/my_project/wsgi.py”,第25行,在
application=get\u wsgi\u application()
文件“/usr/local/lib/python3.4/dist-packages/django/core/wsgi.py”,第13行,在get\u-wsgi\u应用程序中
django.setup(set_prefix=False)
文件“/usr/local/lib/python3.4/dist packages/django/_init__.py”,第27行,在安装程序中
应用程序。填充(设置。已安装的应用程序)
文件“/usr/local/lib/python3.4/dist-packages/django/apps/registry.py”,第85行,填充
app_config=AppConfig.create(条目)
文件“/usr/local/lib/python3.4/dist-packages/django/apps/config.py”,第90行,在create中
模块=导入模块(条目)
文件“/usr/lib/python3.4/importlib/_init_uuu.py”,第109行,在导入模块中
return _bootstrap._gcd_import(名称[级别:],包,级别)
文件“”,第2254行,在_gcd_import中
文件“”,第2237行,在“查找”和“加载”中
文件“”,第2224行,在“查找”和“加载”中解锁
ImportError:没有名为“django\u static\u jquery”的模块
  • 这是否意味着我已经克服了无法导入我的_项目的困难
  • 我已经运行了collectstatic并确保静态jquery在我的静态根目录中,它怎么可能无法导入已安装的应用程序

  • 在Apache配置中,
    WSGIDaemonProcess
    指令:

    您的
    python路径不正确或不完整。要导入
    myu项目
    ,必须将
    /home/pi/projects/myu projectMain/myu项目
    添加到python路径

    例如:

    WSGIDaemonProcess my_project python-path=/home/user/projects/my_projectMain/my_project python-home=/home/user/projects/my_projectMain/my_projectEnv
    

    仔细检查该文件中的所有配置,在大多数地方可能是
    pi
    而不是
    user
    。包括上面的一行。

    我做了一些错误的事情,导致了我所犯的错误。其中一些对更有经验的用户来说可能是显而易见的,但希望写下这些教训能帮助其他人。我知道我必须在很多人的地方挖得很深才能弄清楚其中的一些东西

    我了解到,一旦设置了virtualenv(
    virtualenv-p/usr/local/bin/python3
    btw),当virtualenv处于活动状态时,您应该只使用
    pip
    python3
    (分别与
    pip3
    相反)。例如:

    (venv) user my_projectMain $ pip install django-bootstrap3
    
    而不是:

    (venv) user my_projectMain $ pip3 install django-bootstrap3
    

    我的问题编辑显示,我为我的目录结构找到了正确的WSGIDaemonProcess python路径。感谢@spectras的帮助


    接下来是一些文件系统权限设置步骤,我在下面的指南(下面的链接)中完全忽略了这些步骤


    在这一切之后,我仍然得到:
    importorror:没有名为'django\u static\u jquery'的模块
    。如果我在settings.py中从已安装的_应用程序中删除该行,则该站点将正确加载

    最终,这是因为我使用的是针对Python3.4编译的mod_wsgi,在我的Python3.5.2 virtualenv中,正如上面提到的@Graham Dumpleton。我一直在使用以下工具安装mod_wsgi:

    sudo apt-get install libapache2-mod-wsgi-py3
    
    它使用的是我的操作系统附带的Python 3.4(顺便说一句,raspbian jessie)

    然而,由于我已经手动安装了Python3.5.2,所以我还需要手动安装mod_wsgi并根据我的3.5.2安装进行编译。以下是我所做的:

    mkdir ~/mod_wsgiPy3.5
    cd ~/mod_wsgiPy3.5
    wget https://pypi.python.org/packages/84/65/44a10ac5e117abc40078575a3dcf3256545ba20495b7330ba59045ec3503/mod_wsgi-4.5.9.tar.gz
    tar -zxvf mod_wsgi-4.5.9.tar.gz
    cd mod_wsgi-4.5.9/
    ./configure --with-python=/usr/local/bin/python3
    make
    sudo make install
    
    在此之后,apache不会重新启动,因为。我发现这是因为我必须在apache中激活这个新安装的mod_wsgi模块。这是通过以下方式实现的:

    sudo a2enmod
    wsgi
    sudo systemctl restart apache2
    

    /etc/apache2/sites available/000-default.conf:

    ...
    #ServerName www.example.com
    
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html    
    
    Alias /static /home/user/projects/my_projectMain/my_project/static
            <Directory /home/user/projects/my_projectMain/my_project/static>
                Require all granted
            </Directory>
    
            <Directory /home/user/projects/my_projectMain/my_project/my_project>
                <Files wsgi.py>
                    Require all granted
                </Files>
            </Directory>
    
            WSGIDaemonProcess my_project python-path=/home/user/projects python-home=/home/user/projects/my_projectMain/my_projectEnv
            WSGIProcessGroup my_project
            WSGIScriptAlias / /home/user/projects/my_projectMain/my_project/my_project/wsgi.py
    ...
    
    ...
    WSGIDaemonProcess my_project python-path=/home/user/my_projectMain/my_project/my_project python-home=/home/user/my_projectMain/venv
    WSGIProcessGroup my_project
    WSGIScriptAlias / /home/user/my_projectMain/my_project/my_project/wsgi.py
    ...
    
    最终目录结构(~/my\u projectMain/):


    现在一切都很好。我推荐这本指南,因为它帮了我很多忙:。看起来他们有一些用于各种OSs的

    用户在我的文件中无处不在。我只是试图泛化上面的所有内容,但却错过了堆栈跟踪中的那一行。
    WSGIDaemonProcess my_project python path=/home/user/projects/my_projectMain/my_project
    产生了相同的错误:ImportError:没有名为“my_project”的模块,只是检查您是否更改了它:这一行中可能也应该是
    pi
    当然实际行使用pi代替userI,我看不出哪里出了问题。您能否以某种方式在
    wsgi.py
    中输出
    sys.path
    变量,以检查python路径值是否实际到达它?可能是通过将其写入一个temp文件。可能是不相关的,但是您不能将针对Python3.4编译的mod_wsgi与使用Python3.5构建的Python虚拟环境一起使用。混流是不好的,会导致各种问题。看看哪一个警告。我也注意到了这一点,并将在以后修复它,只要你认为它与上述问题无关。我会先修复它。如果不正确匹配,则无法保证任何内容。还要检查您的目录/文件是否具有Apache运行用户可以访问的权限。这是一个问题。我的回答中有详细内容。谢谢你的帮助。你是说你放弃了python主页?根据您提供的有关目录结构的其他信息,您更改的
    python路径
    看起来是错误的。你确定你没有改变其他事情?
    .
    ├── my_project
    │   ├── app
    │   ├── db.sqlite3
    │   ├── manage.py
    │   ├── my_project
    │   └── static
    └── venv