создавать файлы .py, которые будут работать в указанной виртуальной среде python, а также импортировать другие файлы по указанным путям - PullRequest
0 голосов
/ 27 марта 2019

Я очень новичок в 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'

1 Ответ

1 голос
/ 27 марта 2019

По первому вопросу вы можете явно указать исполняемый файл Python в вашем venv:

python_venv/bin/python scripts/data/master.py

или измените шебанг в начале каждого скрипта, чтобы он указывал на одно и то же место напрямую, а затем запустите просто scripts/data/master.py (хотя это жестко кодирует местоположение, которое вы, вероятно, не хотите).

...