【问题标题】:Anaconda: Permanently import own module, but not their "directory-wise siblings"Anaconda:永久导入自己的模块,但不是它们的“目录兄弟”
【发布时间】:2021-11-12 10:35:56
【问题描述】:

我在“GitHub”文件夹中有多个 Python 项目(也是 Git 存储库),如下所示:

GitHub/
├── Project_1/
│   ├── main.py
│   └── ...
└── Project_2/
    ├── main.py
    └── ...

现在我想要的是 import Project_1 在 Project_2 的 .py 文件中(例如 main.py)。

我当然在网上搜了一下,发现了这些相关的问题:

但是,它们都描述了我将如何管理到import GitHub,这不是我想要的,因为那时我得到了一个奇怪的 Project_2 自我导入。

有什么方法可以实现我想要的,同时仍然保持“即时”修改所有代码的可能性(不必每次都重新安装)?

顺便说一句,我正在使用 PyCharm - 以防有内部解决方法。

还请告诉我我所做的是否是不好的做法,以及为什么 - 这样我可以从中学习。

提前致谢!

【问题讨论】:

    标签: python anaconda


    【解决方案1】:

    如果项目packages are properly, well, packaged,即您通常可以pip install 他们,那么您也可以使用pip install -e-e for --editable)让pip 将它们链接到您当前的环境而不是复制文件。

    这样,包在其目录中仍然是可编辑的,并且可以像任何其他包一样使用。

    示例

    一个易于操作的项目树的示例可能如下所示。

    - my_projects/ (née GitHub)
      - project1/
        - setup.py (or pyproject.toml)
        - package1/
          - __init__.py
          - mod1.py
          - mod2.py
      - project2/
        - setup.py (or pyproject.toml)
        - package2/
          - __init__.py
          - mod3.py
          - mod4.py
      - project3/
        - secretproject/
          - __init__.py
          - __main__.py  # to allow running `python -m secretproject`
          - mod5.py
    

    这假设 project1project2 是包含您想在 project3 中使用的包的项目,这些包不一定需要可重用。

    如果 project1project2 已为软件包安装正确配置(请参阅上面的链接),那么您可以在 project3 的 virtualenv 中执行 pip install -e ~/my_projects/project1 -e ~/my_projects/project2package1package2 是可供secretproject使用。

    【讨论】:

    • 当我将所有 .py 文件直接放在顶部时,它是否“打包好”(参见目录树)?尝试您的想法时出现此错误:“无法从安装目录获得安装脚本的一致路径”。不过我喜欢这种方法!
    • 不完全...查看我的编辑!
    • 好的,现在这不再是我的目录树了(“包在额外的文件夹中”)...如果我把它改成你的例子,我现在知道了很多方法来实现我的目标...我希望还有另一种可能性,可以跨项目导入 .py 文件
    • 没有非标准的方法来做这样的事情。你可以摆弄sys.path,但我非常强烈建议不要这样做,因为例如IDE 支持将中断。
    • 是的,我明白了 - 我现在更改了我的目录树,我会接受这个答案
    猜你喜欢
    • 2017-08-30
    • 2021-05-18
    • 2020-06-13
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多