我刚刚加入了一个现有代码库相当大的项目。我们在linux中开发,不使用和IDE。我们通过命令行运行。我试图弄清楚如何让python在运行项目模块时搜索正确的路径。例如,当我运行以下操作时:
python someprojectfile.py
我明白了
导入错误:没有名为core的模块。’somemodule’
我所有的导入都会得到这个,我认为这是路径问题
在导入语句期间,如何让Python搜索~/codez/project/以及*.py文件的所有文件和文件夹
有几种可能的方法可以做到这一点:
- 将环境变量
PYTHONPATH设置为以冒号分隔的目录列表,以搜索导入的模块 - 在程序中,使用
sys.path.append('/path/to/search')添加希望Python搜索导入模块的目录名sys.path只是Python每次被要求导入模块时搜索的目录列表,您可以根据需要修改它(尽管我不建议删除任何标准目录!)。当Python启动时,您在环境变量PYTHONPATH中放置的任何目录都将插入到sys.path中 - 使用
site.addsitedir将目录添加到sys.path。这与普通追加的区别在于,当您使用addsitedir时,它还会在该目录中查找.pth文件,并使用它们根据文件的内容向sys.path添加其他目录。有关更多详细信息,请参阅文档
您想使用哪一种取决于您的情况。请记住,当您将项目分发给其他用户时,他们通常会以Python导入程序自动检测Python代码文件的方式安装项目(即包通常安装在站点包目录中),因此如果您在代码中弄乱了sys.path,当代码在另一台计算机上运行时,这可能是不必要的,甚至可能产生不利影响。对于开发,我大胆猜测设置PYTHONPATH通常是最好的方法
然而,当您使用的是只在您自己的计算机上运行的东西时(或者当您有非标准设置时,例如有时在web应用程序框架中),执行以下操作并非完全不常见
导入系统
从os.path导入目录名
sys.path.append(dirname(_文件__))