Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自不同项目的Python导入包_Python - Fatal编程技术网

来自不同项目的Python导入包

来自不同项目的Python导入包,python,Python,我试图从不同的项目导入一个包,但它无法识别我试图从中导入的项目。我看过这个问题的各种答案(包括) 我的项目结构如下所示: Project1 - __init__.py - foo_directory - foo.py - __init__.py Project2 - __init__.py -bar_directory - bar.py - __init__.py 在bar.py中,我尝试执行以下操作: import sys sys.path.append('pat

我试图从不同的项目导入一个包,但它无法识别我试图从中导入的项目。我看过这个问题的各种答案(包括)

我的项目结构如下所示:

Project1
 - __init__.py
 - foo_directory
  - foo.py
  - __init__.py


Project2
 - __init__.py
 -bar_directory
  - bar.py
  - __init__.py
在bar.py中,我尝试执行以下操作:

import sys
sys.path.append('path/to/Project2')

from Project1.foo_directory import foo.py
我不明白为什么在我尝试导入时无法识别Project1?

2解决方案:

1-使用PYTHONPATH环境变量。有关更多详细信息,请参阅

$ export PYTHONPATH=$(PYTHONPATH):/path/to/project1 
2-为您的项目创建setup.py,以便您可以安装它们,从而导入它们>


注意:从应用程序内部搞乱sys.path不是推荐的解决方案,因为它不是真正健壮的,也不是跨平台的

您应该创建两个包,
Project1
Project2
(注意)

然后安装它们

pip install -e Project1/
pip install -e Project2/
然后你就可以简单地

from Project1.foo_directory import foo

明显的优势:Package2依赖于Package1,但不需要知道它安装在哪里。管理所有导入路径是由
pip
和您所在的环境(希望是一个虚拟环境)完成的。

根据Maresh给我的建议,我做了以下工作(我使用的是Windows,这就是为什么我不能完全遵循他的答案):

在PyCharm:File>Settings>Project:Project1>项目结构中。 -添加内容根目录(添加Project2的位置)。 -申请并确认


然后,在bar.py中,我能够从Project2导入文件,这可能会有所帮助:如果我不将Project2放入Project1中,则会得到
。。如果是指向本地项目的路径,或者是以svn+、git+、hg+或bzr+开头的VCS url,则本地包必须位于父包内才能安装?@TomSawyer请打开一个新问题
pip install -e Project1/
pip install -e Project2/
from Project1.foo_directory import foo