PyCharm:如何使用一个项目作为另一个项目的依赖项?

PyCharm:如何使用一个项目作为另一个项目的依赖项?,pycharm,pythonpath,Pycharm,Pythonpath,在PyCharm中,我有一个项目调用另一个项目的模块 例如,假设我们有两个项目abc和xyz。在abc项目中,我们有一个带有函数f1()的模块abc.mod_a,在xyz项目中,我们有一个带有函数f2()的模块xyz.mod_b abc.mod_a.py: import xyz.mod_b def f1(): xyz.mod_b.f2() xyz.mod_b.py: def f2(): print("something was done") 为了实现这一点,我做了以下工作:

在PyCharm中,我有一个项目调用另一个项目的模块

例如,假设我们有两个项目abc和xyz。在abc项目中,我们有一个带有函数f1()的模块abc.mod_a,在xyz项目中,我们有一个带有函数f2()的模块xyz.mod_b

abc.mod_a.py:

import xyz.mod_b
def f1():
    xyz.mod_b.f2()
xyz.mod_b.py:

def f2():
    print("something was done")
为了实现这一点,我做了以下工作:

我已将xyz添加为abc项目的项目依赖项: 设置->项目->项目依赖项

我已将xyz主目录的路径添加到用于project abc的解释器的PYTHONPATH中: 设置->项目->项目解释器->显示所有->解释器路径->添加路径


当我运行使用abc.mod_a.py的代码时,我在初始import xyz语句中得到一个module not found错误。我做错了什么?

最简单的方法是处理abc项目并打开xyz项目。您将看到下面的对话框

这将打开abc项目内部的xyz。它将为您处理所有依赖项

另一种选择是在开发模式下安装xyz python库。


这将在python的site packages目录中创建一个指向xyz目录的链接。当您调用
import xyz.mod_b
时,它将在适当的目录中查找。

谢谢@justengel。我想我做到了你第一次提出的,我在PyCharm中将abc作为一个项目打开之后,添加了xyz作为一个项目。您的第二个建议很有趣,这是一个很容易撤销的建议(我以前很难让pip卸载完全清理已安装的软件包)?我问这个问题的原因是因为我已经在解释器的环境中安装了程序包xyz,我现在正在尝试用我可以为git PR编辑的源版本临时替换它,但我想先在PyCharm中开发它……一旦完成,我就不想在解释器中使用之前安装的xyz。
pip uninstall-e../path_to/xyz
是否会正确清理解释器并使其保持原始状态,即解释器的虚拟环境(站点包)中仍安装了原始版本的xyz?如果用水管冲洗的话,我可能不太难重新安装,但如果可以避免的话,我会尽量小心避免把任何东西弄乱,因为我发现这类事情很棘手,尽管我猜这就是您学习的方式。顺便说一句,如果我没有将xyz添加为项目依赖项或project abc解释器的PYTHONPATH,那么该软件包将按预期找到,因为它已安装到Anaconda虚拟环境中。我正在尝试另一种方法,因为我不想编辑安装在站点包中的代码,这似乎是自找麻烦,相反,我想在单独的位置编辑xyz的源代码,即单独的项目xyz。您可以使用
pip uninstall xyz
卸载。我以前没有pip卸载问题。我认为这只是在站点包中创建一个.egg文件夹,链接到您的目录。您没有在站点包中编辑代码。我没有遇到PyCharm不使用依赖项目的问题。确保您的软件包有一个
\uuuu init\uuuu.py
文件。您还可以右键单击并排除具有相同名称的目录,也可以将父目录标记为源根目录。
pip install -e ../path_to/xyz