Python-在命令行模块运行期间添加 PYTHONPATH

我想逃跑:

python somescript.py somecommand

但是,当我运行这个命令时,我需要 PYTHONPATH包含一个特定的目录。我不能仅仅将它添加到我的环境变量中,因为我要添加的目录根据我正在运行的项目进行了更改。有没有办法在运行脚本时更改 PYTHONPATH?注意: 我甚至没有一个 PYTHONPATH变量,所以我不需要担心在运行这个脚本时附加它或者覆盖它。

176571 次浏览

For Mac/Linux;

PYTHONPATH=/foo/bar/baz python somescript.py somecommand

For Windows, setup a wrapper pythonpath.bat;

@ECHO OFF
setlocal
set PYTHONPATH=%1
python %2 %3
endlocal

and call pythonpath.bat script file like;

pythonpath.bat /foo/bar/baz somescript.py somecommand
 import sys
sys.path.append('your certain directory')

Basically sys.path is a list with all the search paths for python modules. It is initialized by the interpreter. The content of PYTHONPATH is automatically added to the end of that list.

If you are running the command from a POSIX-compliant shell, like bash, you can set the environment variable like this:

PYTHONPATH="/path/to" python somescript.py somecommand

If it's all on one line, the PYTHONPATH environment value applies only to that one command.

$ echo $PYTHONPATH


$ python -c 'import sys;print("/tmp/pydir" in sys.path)'
False
$ PYTHONPATH=/tmp/pydir python -c 'import sys;print("/tmp/pydir" in sys.path)'
True
$ echo $PYTHONPATH

This is for windows:

For example, I have a folder named "mygrapher" on my desktop. Inside, there's folders called "calculation" and "graphing" that contain Python files that my main file "grapherMain.py" needs. Also, "grapherMain.py" is stored in "graphing". To run everything without moving files, I can make a batch script. Let's call this batch file "rungraph.bat".

@ECHO OFF
setlocal
set PYTHONPATH=%cd%\grapher;%cd%\calculation
python %cd%\grapher\grapherMain.py
endlocal

This script is located in "mygrapher". To run things, I would get into my command prompt, then do:

>cd Desktop\mygrapher (this navigates into the "mygrapher" folder)
>rungraph.bat (this executes the batch file)

You may try this to execute a function inside your script

python -c "import sys; sys.path.append('/your/script/path'); import yourscript; yourscript.yourfunction()"

You can paste the following code in the __init__.py of the package from which you want to import:

import sys
from pathlib import Path




sys.path.insert(0, Path(__file__).parent)

Then you can import modules from that package as you would usually do.

import <module_name>


<module_name>.<method_on_module>()
Example:
import algorithms


algorithms.run_algo1()

Your IDE might underline the module name, but that won't be a problem when you run the Python interpreted.

Also, if you need to read the path, later on, you can do:

DIR_PATH = Path(sys.path[0])