![](/img/trans.png)
[英]How to make a list of the user-created python files that a module depends on?
[英]Importing user-created Python modules and data files from relative directories
我正在构建一组彼此依赖的Python模块。
我的文件目录目前看起来像:
.
├── utilities
│ ├── __init__.py
│ ├── utility.py
│ ├── data.csv
├── src
│ ├── __init__.py
│ |── functions
│ ├── __init__.py
│ └── function.py
└── __init__.py
此外, function.py
从utilities/data.csv
导入数据。
从顶级目录( .
),我运行python3 src/functions/function.py
。
我收到以下导入错误:
Traceback (most recent call last):
File "src/functions/function.py", line 1, in <module>
from utilities.utility import UtilityFunctionA
ImportError: No module named 'utilities'
如何从function.py
文件中正确导入utilities
? 或者我应该首先不运行嵌套文件,而是在目录的顶层运行文件?
从PyCharm中运行此代码时导入成功。
愚蠢的问题,但尽管阅读了大量的文档(和谷歌搜索),我仍然无法弄明白。
更新:
使用python3 -m src.functions.function
可以从命令行运行模块并使用正确的导入并成功加载csv。
但是,当我从PyCharm中运行模块时,例如使用
现在我收到OSError: File b'utilities/data.csv' does not exist
有没有办法设置我的模块从PyCharm和命令行运行?
如果你希望能够做到 - from utilities.utility import UtilityFunctionA
- 从function.py
,从顶级目录运行时 - .
。 您需要使用-m
选项将python文件作为模块运行。 示例 -
python3 -m src.functions.function
但是上述方法只有在你总是运行时才有效.
目录(顶级目录)。 我总是手动将顶级目录添加到PYTHONPATH
环境变量中。
或者使用os.path
和相对路径使用__file__
以编程方式将其添加到sys.path
。 示例 -
import sys
import os.path
path_to_top = os.path.abspath(os.path.join(os.path.dirname(__file__),'..','..'))
sys.path.append(path_to_top)
在此之后进行导入。 如果目录结构总是保持不变,那么即使在其他系统中也是如此,而不必设置任何环境变量。
根据更新的要求 -
现在我收到OSError:File b'utilities / data.csv'不存在的错误
有没有办法设置我的模块从PyCharm和命令行运行?
对于读取文件,Python使用当前工作目录作为起点,并且相对于当前工作目录解析所有相对路径。 依赖当前工作目录作为特定目录绝不是一个好主意,因为我们可以使用脚本的绝对路径从任何地方运行python脚本。 对于加载文件,我们可以使用os.path
和相对路径来创建文件的绝对路径。 示例 -
import os.path
path_to_datacsv = os.path.abspath(os.path.join(os.path.dirname(__file__),'..','..','utilities,'data.csv'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.