然后我读了this,这表明我刚刚学到的一切都是错误的。所以现在我又困惑了,我很难弄清楚应该如何组织我的代码。在
这里有一个非常具体的问题,我不知道如何正确回答任何版本的Python,尤其是我不知道答案是否从python2变为3。假设我希望在一个克隆的github repo中有一个类,存储在:
/Users/me/my_teams_code/some_project/package/IWantThisClass.py
但假设我还有其他项目:
^{pr2}$每个都使用IWantThisClass。一种策略似乎只是手动将正确的目录添加到系统路径每次,但这是相当麻烦的-尤其是当我只是在一个Jupyter笔记本试验。我在搜索之后找到的解决方案是将包目录添加到bash中的PYTHONPATH变量中;这在“import IWantThisClass”工作正常的意义上起作用。但我在科格兰上面的帖子中看到:
"This next trap exists in all current versions of Python, including 3.3, and can be summed up in the following general guideline: 'Never add a package directory, or any directory inside a package, directly to the Python path'."
那么解决这个问题的“正确”方法是什么呢?在
基本上,如果
package
是包的顶层目录,那么应该将包含package
的目录添加到sys.path
。如果一个单独的包{cd3>不是一个单独的目录{cd3>,那么这个包不应该是一个单独的目录如何添加这些路径是另一个问题。对于要向路径添加一次性内容的情况,我发现最简单的方法是在“站点目录”中创建一个} module 的文档中了解如何执行此操作。在
.PTH
文件,该文件可以是主站点包目录,也可以是特定于用户的站点包目录。在.PTH
文件中,您可以列出其他目录,这些目录随后将被添加到site.path
。因此,您可以拥有自己的小my_stuff.pth
文件,该文件用您需要的目录设置sys.path
。这避免了在每个脚本中添加样板代码来手动修改sys.path
。您可以在^{另一个可能更好的答案是,为了访问特定的文件,您应该尽量避免向} 或{a3}来“就地”安装这些包。(也就是说,包文件将保留在原来的位置,而不是移动到全局Python站点包中,安装程序将更新相应的
sys.path
添加特定的目录。相反,您应该尝试安装相关的包,这将让Python为您设置路径。如果您使用的是开发中的软件包,您不想让主站点的软件包混乱,那么可以使用^{.PTH
文件,以便新安装的包是可导入的。)简而言之,最终你需要从“这个文件想要这个类从这个其他文件”的角度来看待它。您应该关注的单元是可安装的包或模块。如果您正在编写需要SomeClass的代码,则应该安装提供SomeClass的包/模块,然后导入它;不要试图在没有安装其包的情况下临时操作
sys.path
来针对您想要的单个文件/类。(如前所述,setup.py develop
和pip install editable
允许您这样做,同时仍将实际文件保留在所需的位置。)相关问题 更多 >
编程相关推荐