我是否错误地组织了 Python 目录?

Did I organise my Python directory incorrectly?

我正在尝试在 Python 中制作一个独立的应用程序,但有一些与导入和项目目录结构相关的问题我不知道如何解决。

项目结构如下:

root/
  app/
    __init__.py 
    main.py
    foo.py     
  tests/
    __init__.py
    main_tests.py
    foo_tests.py

这是我不知道如何解决的两个相互冲突的要求:

我该如何解决这些问题?我的项目组织方式有什么需要改变的吗?

你应该有一个setup.py;在 setup.py 你应该有:

setup(
    ...
    scripts = ['bin/run_my_app']
    ...
)

bin/run_my_app 然后是一个包含以下内容的脚本:

#!/usr/bin/env python

from app.main import main
main()

现在,当您 运行 python setup.py developpython setup.py install 时,setuptools/distribute 会将命令行脚本 run_my_app 安装到您的小路。 python setup.py develop 使得每次更改源代码后 不需要重新安装 包到 virtualenv 成为可能;只有在更改 setup.py 本身或包中任何可能的 C 语言扩展模块后,您才需要重新 运行 setup.py develop

或者 运行 您的主模块

python -m app.main

特别是 不要 尝试 运行 来自 的应用程序在 带有 python app/main 的包中,因为它从来不应该那样工作。


为了开发代码,你有一个virtualenv,然后你可以使用python setup.py develop将代码link放到virtualenv中;一个特殊的 link 安装到 site-packages 中,它指向您的应用程序的源代码,因此您可以就地开发它,但它的行为就像安装到 site-packages 中一样。