Skip to content

Commit

Permalink
fix: Set __file__ constant when using eval_file (#1300) (#3233)
Browse files Browse the repository at this point in the history
* Set __file__ constant when using eval_file

* Use const ref

* Use a move instead

* Revert

* Improve test

* Guard test with Python version

* Fix tests

* Dont support Python2 API

* Drop Python2 eval __file__ support

* Hack

* Semisupport Python2

* Take2

* Remove Python2 support
  • Loading branch information
Skylion007 authored Sep 9, 2021
1 parent 6abf2ba commit 4c6bee3
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
9 changes: 9 additions & 0 deletions include/pybind11/eval.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,15 @@ object eval_file(str fname, object global = globals(), object local = object())
pybind11_fail("File \"" + fname_str + "\" could not be opened!");
}

// In Python2, this should be encoded by getfilesystemencoding.
// We don't boher setting it since Python2 is past EOL anyway.
// See PR#3233
#if PY_VERSION_HEX >= 0x03000000
if (!global.contains("__file__")) {
global["__file__"] = std::move(fname);
}
#endif

#if PY_VERSION_HEX < 0x03000000 && defined(PYPY_VERSION)
PyObject *result = PyRun_File(f, fname_str.c_str(), start, global.ptr(),
local.ptr());
Expand Down
3 changes: 3 additions & 0 deletions tests/test_cmake_build/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@

import test_cmake_build

if str is not bytes: # If not Python2
assert isinstance(__file__, str) # Test this is properly set

assert test_cmake_build.add(1, 2) == 3
print("{} imports, runs, and adds: 1 + 2 = 3".format(sys.argv[1]))

0 comments on commit 4c6bee3

Please sign in to comment.