【问题标题】:How to place all files in python module to the same top level namespace?如何将 python 模块中的所有文件放置到同一个顶级命名空间?
【发布时间】:2022-11-21 13:59:18
【问题描述】:

我有包含多个文件的示例 python 项目:

源代码/common.py:

def toint(x):
    return int(x)

源代码/foo1.py:

import common

def add(a,b):
    return common.toint(a) + common.toint(b)

源代码/foo2.py:

import common

def sub(a,b):
    return common.toint(a)-common.toint(b)

安装程序.py:

from setuptools import setup

setup (name = 'test_py_project',
       version = '1.0',
       author='Vladislav Tsendrovskii',
       description = 'test python modules',
       package_dir = {'': 'src'}
       )

现在我想安装这个项目。我运行 python3 setup.py install --user 并安装。

但是它的安装方式不是我想要的。

当我尝试使用它时,我遇到了问题。

我做不到import test_py_project.foo1

但我可以做到import foo1

我应该如何修改我的项目,将所有内容放入test_py_project 命名空间?

我试图用谷歌搜索解决方案。但是我失败了(

【问题讨论】:

    标签: python namespaces


    【解决方案1】:

    参考 python 文档 https://docs.python.org/2/tutorial/modules.html#intra-package-references 来创建模块和项目目录格式。例如。 Modulename/ModuleFiles.py 和 __init__.py__main__.py 文件的存在。从 __init__ 你可以 import * 或使用相对/绝对导入。

    【讨论】:

    • 为什么要引用 Python 2 文档?我猜想在 2022 年,没有人再使用 Python 2(希望如此),因为它的生命周期结束了。
    【解决方案2】:

    但我可以做 import foo1

    看起来,您的 Python 已经可以在 src 文件夹中找到内容。

    如果你想让test_py_project.foo1工作,在src下创建必要的目录并将foo1.py移到那里,这样你就有了src/test_py_project/foo1.py

    然后 import import test_py_project.foo1 应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-13
      • 2023-03-14
      • 1970-01-01
      • 2012-05-28
      • 2011-08-31
      • 2010-10-02
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多