我的Python目录组织得不对吗?

2024-03-28 09:49:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

项目结构如下:

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

我不知道如何解决这两个相互矛盾的要求:

  • 测试是使用Nose框架编写的。当我从root目录运行nosetests时,它要求所有导入都与app包相关。你知道吗

    # app/main.py
    import app.foo  # `import foo` will not work
    
  • 另一方面,如果我想root运行应用程序(使用类似python app/main.py的命令),则会出现另一个问题。它会正确地抱怨找不到app包。

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


Tags: 项目pyimport目录框架app应用程序foo
1条回答
网友
1楼 · 发布于 2024-03-28 09:49:34

您应该有一个setup.py;在setup.py中您应该有:

setup(
    ...
    scripts = ['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

尤其是不要试着在包中运行一个应用程序,因为它从来就不应该这样工作。你知道吗


为了开发代码,您需要一个virtualenv,然后您可以使用python setup.py develop将代码链接到virtualenv;一个特殊的链接被安装到site-packages中,该链接指向您的应用程序的源代码,因此您可以就地开发它,但是它的行为就像它被安装到site-packages中一样。你知道吗

相关问题 更多 >