【问题标题】:Installing a single file package in conda/pip requires redundant import statement在 conda/pip 中安装单个文件包需要多余的 import 语句
【发布时间】:2019-01-04 01:34:09
【问题描述】:

我创建了一个发布到 pypi.org 的 python 包。该包由一个与包同名的 .py 文件组成。

在 conda 或标准 python 环境中通过 pip (pip install package_name) 安装包后,我必须使用以下语句从该模块导入函数:

from package_name.package_name import function_x

如何重新组织我的包或调整我的安装命令,以便我可以使用 import 语句

from package_name import function_x

我通过python setup.py install安装时已成功使用。

我的 setup.py 在下面

setup(
    name = "package_name",
    version = "...",
    packages=find_packages(exclude=['examples', 'docs', 'build', 'dist']),

)

【问题讨论】:

  • 您显然是在要求setuptools 构建一个包含您的模块的包,而不仅仅是安装您的模块。如果您没有明确执行此操作,可能是因为您使用find_packages 只是搜索整个源代码树并找到所有包。如果你只有一个文件,那么不使用它可能比让它找到你的模块作为一个平面模块更容易。
  • 我能想到的唯一另一种可能性是你有一个package_name 目录,其中有一个__init__.py 和一个名为package_name.py 的模块文件,而__init__.py 正在尝试导入和重新- 从模块中导出所有内容,但不知何故你得到了setuptools,要么忽略__init__.py,要么替换它。但这似乎不太可能是您的问题。
  • 谢谢@abarnert。这是因为我在设置参数中使用了包而不是 py_modules!

标签: python pip python-import conda python-packaging


【解决方案1】:

将您的设置参数从使用包更改为使用 py_modules,例如

setup(
    name = "package_name",
    version = "..",
    py_modules=['package_name'],
)

这里记录了https://docs.python.org/2/distutils/introduction.html#a-simple-example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多