这是我的目录布局:
projects/
+-projectA/
|---moduleA.py
|---script.py -> ../projectB/script.py
+-projectB/
|---script.py
这是script.py包含的内容:
import moduleA
print "hello there"
这就是我正在做的事情:
$ pwd
[...]/projects/projectA
$ python2 script.py
Traceback (most recent call last):
File "script.py", line 1, in <module>
import moduleA
ImportError: No module named moduleA
这种布局的原因是项目A和项目B都来自 git 存储库,并且每隔一段时间就会更新一次。但是,我编写projectB并想要编辑和推送它,而不必复制文件(它依赖于项目A中的东西)。
将它作为子模块 / projectA的一部分不是一个选项,因为脚本具有项目A的维护者不想要的依赖项。
反过来也不是一个选项,因为它也是如此之小,以至于它不能保证将项目A(实际上很多,实际上是很多不同的模块)作为项目B中的子模块添加,这也会产生不必要的额外文件。此外,用户主要位于项目A的目录中,因此无论如何子模块都没有意义。
出于显而易见的原因,我也不想使用硬链接。我也做不了像
这样的事情sys.path.append("../projectA")
在script.py中的,因为script.py的其他用户可能没有和我一样的目录布局,有些会直接将它下载到projectA(没有克隆)。
首先,为什么python解释器遵循该符号链接,而不是像在projectA的目录中那样执行代码?
其次,如何通过上述警告解决此问题?
(请随意回答上述两个问题中的一个。)