我刚刚加入了一个拥有相当大的现有代码库的项目。我们在linux中开发,不使用和IDE。我们通过命令行运行。我正试图找出如何让python在运行项目模块时搜索正确的路径。例如,当我运行类似于:
python someprojectfile.py
我明白了
ImportError: no module named core.'somemodule'
我从所有的进口货中得到这个,我想这是路径的问题。
TLDR编号:
如何让Python在import语句期间搜索~/codez/project/
和所有文件和文件夹中的*.py文件。
Tags:
有几种可能的方法:
PYTHONPATH
设置为以冒号分隔的目录列表,以搜索导入的模块。sys.path.append('/path/to/search')
添加希望Python搜索导入模块的目录名。^{PYTHONPATH
中的任何目录都将插入sys.path
。sys.path
。这与简单追加的区别在于,当您使用addsitedir
时,它还会在该目录中查找.pth
文件,并使用这些文件根据文件的内容可能向sys.path
添加其他目录。有关详细信息,请参阅文档。你想用哪一种取决于你的情况。请记住,当您将项目分发给其他用户时,他们通常会以这样的方式安装项目:Python的导入程序将自动检测Python代码文件(即包通常安装在
site-packages
目录中),因此,如果您在代码中使用sys.path
,当代码在另一台计算机上运行时,这可能是不必要的,甚至可能产生不利影响。对于开发,我敢猜测设置PYTHONPATH
通常是最好的方法。然而,当你使用的东西只是在你自己的电脑上运行(或者当你有非标准的设置,例如有时在web应用框架中),做一些类似的事情并不少见
我知道这根线有点老了,但我花了一些时间才真正了解它,所以我想和大家分享。
在我的项目中,主脚本位于父目录中,为了区分模块,我将所有支持模块放在一个名为“modules”的子文件夹中。在主脚本中,我像这样导入这些模块(对于名为report.py的模块):
如果我称我的主要脚本,这工作。但是,我想通过在每个模块中包含一个
main()
来测试每个模块,并直接调用每个模块,如下所示:现在,Python抱怨说它找不到“名为modules的模块”。这里的关键是,默认情况下,Python在其搜索路径中包含脚本的文件夹,而不是CWD。所以这个错误实际上是“我找不到模块子文件夹”。因为report.py模块所在的目录中没有“modules”子目录。
我发现最新的解决方案是在Python搜索路径中附加CWD,在顶部包括:
现在Python搜索CWD(当前目录),找到“modules”子文件夹,一切正常。
您还应该在这里阅读python包:http://docs.python.org/tutorial/modules.html。
从您的示例中,我猜您确实在
~/codez/project
有一个包。python目录中的文件__init__.py
将目录映射到命名空间中。如果您的子目录都有一个__init__.py
文件,那么您只需要将基本目录添加到PYTHONPATH
。例如:除了测试PYTHONPATH环境变量之外,正如David所解释的,您还可以用python进行如下测试:
。。。
相关问题 更多 >
编程相关推荐