【问题标题】:Import python from sibling folder without -m or syspath hacks从没有 -m 或 syspath hacks 的兄弟文件夹导入 python
【发布时间】:2021-12-19 23:45:58
【问题描述】:

所以过去三天我一直在尝试找出一个可行的解决方案来解决这个导入问题。

我的项目中有一个子文件夹,其中有用于数据库控制的脚本,其中有想要调用它的兄弟文件夹。我尝试了许多在线解决方案,但找不到任何可以正常工作的方法。似乎 Python 3.3/4 中的一些变化使许多解决方案无效,或者其他什么。

所以我做了一个非常简单的测试用例。

IMPORTS/
├─ folder1/
│  ├─ script1.py
│  ├─ __init__.py
├─ folder2/
│  ├─ script2.py
│  ├─ __init__.py
├─ __init__.py

如何从 script1.py 调用 script2.py 中的函数?

【问题讨论】:

  • 我假设您的意思是第二个文件夹是文件夹 2,包含 script2.py?
  • 是的,我的错。会更新

标签: python import architecture python-import


【解决方案1】:

我通常更喜欢将我的模块安装为依赖项,这样我就可以从项目根目录导入。这似乎是正确的方法,虽然我很少看到它在网上谈论。

例如从 IMPORTS 运行 pip install -e . (以可编辑模式将包安装在此文件夹中)。这将要求您有一个 setup.py:

from setuptools import setup, find_packages

setup(
    name='IMPORTS',
    version='x.x.x',
    description='What the package does.',
    author='Your Name',
    author_email='x@x.com',
    install_requires=[],
    packages=find_packages()
)

Here 是我个人包中的一个示例。

然后您可以从根文件夹(setup.py 所在的位置)导入。按照你的例子:

from folder1 import script1

反之亦然。

总结:

  1. 编写 setup.py。
  2. 使用pip install -e . 在可编辑模式下安装你的包
  3. 从包根目录编写导入语句。

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多