总的来说,我是linux的新手,我的任务是管理一个服务器。由于种种原因,我不得不在我的用户下创建一个python虚拟环境。
文件目录如下:
~
/python_venv
/scripts
/data_curation
-master.py
/mods
-file1.py
-file2.py
/other
-file3.py
/otherscripts
-file4.py^基本上,python venv在~目录中。其他所有内容都存放在scripts/data_curation和scripts/otherscripts中。
我对两件事很好奇。1)有没有一种方法,我可以直接从命令行运行每个文件,而不必手动激活python venv?例如,在.py文件中放置一行代码,通过指定的路径调用venv?
2)确保所有这些文件都可以相互访问的最简单方法是什么?这意味着如果我想把file3.py导入file4.py,我该怎么做呢?
我一直在尝试使用importlib,但是我得到了这个错误:
(python) [user@server]$ python scripts/data_curation/mods/file1.py
scripts/data_curation/device_functions/epon_nokia.py
ModuleSpec(name='file3', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f66399f9a90>, origin='scripts/data_curation/other/file3.py')
__init__.py
scripts/data_curation/other/__init__.py
ModuleSpec(name='__init__', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7f661a7242b0>, origin='scripts/data_curation/other/__init__.py')
__pycache__
scripts/data_curation/other/__pycache__
Traceback (most recent call last):
File "scripts/data_curation/file1.py", line 21, in <module>
module = imputil.module_from_spec(spec)
File "<frozen importlib._bootstrap>", line 568, in module_from_spec
AttributeError: 'NoneType' object has no attribute 'loader'发布于 2019-03-28 04:24:09
对于第一个问题,您可以在venv中显式引用Python可执行文件:
python_venv/bin/python scripts/data/master.py或者更改每个脚本开头的shebang,使其直接指向相同的位置,然后只使用scripts/data/master.py运行(尽管这会对位置进行硬编码,这可能不是您想要的)。
https://stackoverflow.com/questions/55385789
复制相似问题