代码之家  ›  专栏  ›  技术社区  ›  Sahand

“python-m django”在virtualenv中给出了相互冲突的消息

  •  -1
  • Sahand  · 技术社区  · 7 年前

    我创建了一个virtualenv:

    virtualenv --python=/usr/local/bin/python2.7 workoutpy2.7 
    

    我正在开发一个健身日记网络应用程序,因此得名。 然后我在其中安装了django Unrel:

    pip install git+https://github.com/django-nonrel/django@nonrel-1.5
    

    然后是django Unrel的django工具箱:

    pip install git+https://github.com/django-nonrel/djangotoolbox
    

    然后是mongodb引擎:

    pip install git+https://github.com/django-nonrel/mongodb-engine
    

    python -m django
    

    并得到以下输出:

    /Users/sahandzarrinkoub/Documents/Programming/Web/Django/workoutpy2.7/bin/python: No module named django.__main__; 'django' is a package and cannot be directly executed
    

    这是什么意思?作为记录,以这种方式安装的任何软件包都会发生同样的情况。看看这个:

    (workoutpy2.7) Sahands-MacBook-Pro:workoutpy2.7 sahandzarrinkoub$ pip install pymongo
    Requirement already satisfied: pymongo in ./lib/python2.7/site-packages
    (workoutpy2.7) Sahands-MacBook-Pro:workoutpy2.7 sahandzarrinkoub$ python -m pymongo
    /Users/sahandzarrinkoub/Documents/Programming/Web/Django/workoutpy2.7/bin/python: No module named pymongo.__main__; 'pymongo' is a package and cannot be directly executed
    

    感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Nick T twasbrillig    7 年前

    这个 -m 选择 python 允许您(尝试)运行模块/包。从文档中:

    -m <module-name>

    sys.path 并将其内容作为 __main__

    因为这个论点是一个 单元 扩展( .py ). 模块名应该是有效的绝对Python 它可能允许您使用包含连字符的名称)。

    解释器提供了一个包名,而不是一个普通的模块 将执行 <pkg>.__main__ 作为主模块。这种行为是 故意类似于目录和zipfiles的处理 作为脚本参数传递给解释器。

    -m 需要通过定义 ,这就是为什么 python -m pymongo 然后声明“ No module named pymongo.__main__


    对于Django的情况,或具体而言, django-nonrel django Norel公司 django.__main__ 在1.9中,这就是为什么你正在阅读的文档会误导你。你 能够使用 Django 1.7 tutorial